亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從go中的另一個函數調用變量

從go中的另一個函數調用變量

Go
12345678_0001 2023-06-05 18:26:44
我知道變量是按值傳遞的。但是,我想在這個函數之外的函數中調用一個變量。讓我舉一個例子:package mainimport (    "fmt")func Smile(){  A := 5}func main() {   fmt.Println(A)}這給了我未定義的A。通過 A 的最佳方法是什么?我應該使用指針嗎?我怎么做?
查看完整描述

2 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

無法打印函數A中聲明的變量值Smile()from?main()。

主要原因是變量A只有在代碼執行進入函數時才存在Smile(),更準確地說是到達A變量聲明。在您的示例中,這永遠不會發生。

即使在其他一些示例中發生這種情況(例如Smile()被調用),應用程序也可能有多個 goroutine,并且其中多個 goroutine 可能Smile()同時執行,導致應用程序具有多個A變量,彼此獨立。在這種情況下,which?would?Ain?main()refer?

Go 使用塊在詞法范圍內。A這意味著內部聲明的變量Smile()只能從 訪問Smile(),main()函數不能引用它。如果你需要這樣的“共享”,你必須ASmile().?如果兩者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


查看完整回答
反對 回復 2023-06-05
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

最好的方法是,

指針

前任:

func getCar() {

? ?car := Vehicles.Car{}

? ?setModel(&car)

? ?// model ("BMW") will be available here

}


func setModel(car *Vehicles.Car) {

? ?car.Model = "BMW"

}


查看完整回答
反對 回復 2023-06-05
  • 2 回答
  • 0 關注
  • 159 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號