2 回答

TA貢獻1828條經驗 獲得超3個贊
無法打印函數A
中聲明的變量值Smile()
from?main()
。
主要原因是變量A
只有在代碼執行進入函數時才存在Smile()
,更準確地說是到達A
變量聲明。在您的示例中,這永遠不會發生。
即使在其他一些示例中發生這種情況(例如Smile()
被調用),應用程序也可能有多個 goroutine,并且其中多個 goroutine 可能Smile()
同時執行,導致應用程序具有多個A
變量,彼此獨立。在這種情況下,which?would?A
in?main()
refer?
Go 使用塊在詞法范圍內。A
這意味著內部聲明的變量Smile()
只能從 訪問Smile()
,main()
函數不能引用它。如果你需要這樣的“共享”,你必須A
在Smile()
.?如果兩者Smile()
都main()
需要訪問它,則必須將其設為全局變量,或者必須將其傳遞給需要它的函數。
使它成為一個全局變量,這就是它的樣子:
var a int
func smile() {
? ? a = 5
? ? fmt.Println("a in smile():", a)
}
func main() {
? ? smile()
? ? fmt.Println("a in main():", a)
}
此輸出(在Go Playground上嘗試):
a in smile(): 5
a in main(): 5
將其聲明為本地main()并將其傳遞給smile(),這就是它的樣子:
func smile(a int) {
? ? fmt.Println("a in smile():", a)
}
func main() {
? ? a := 5
? ? fmt.Println("a in main():", a)
? ? smile(a)
}
輸出(在Go Playground上嘗試):
a in main(): 5
a in smile(): 5

TA貢獻1780條經驗 獲得超4個贊
最好的方法是,
指針
前任:
func getCar() {
? ?car := Vehicles.Car{}
? ?setModel(&car)
? ?// model ("BMW") will be available here
}
func setModel(car *Vehicles.Car) {
? ?car.Model = "BMW"
}
- 2 回答
- 0 關注
- 159 瀏覽
添加回答
舉報