在 Go 中,變數的作用域決定了它們在不同程式碼區塊中的可訪問性。當局部變數和頂級常數或包級變數同名時,就會出現一個常見問題:如何引用常數或包級變數而不是局部變數?
考慮以下Go 程式:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
程式在套件層級宣告了一個常數name,但在main 函數內,在函數層級聲明了另一個名為name 的變數。當程式運行時,它會列印“Jobs”,這是局部函數級變數名稱的值。如何存取包級常數名稱?
不幸的是,Go 沒有提供直接方法來引用區塊範圍內的頂級標識符,其中存在同名的局部變數。根據 Go 聲明和作用域規範,本地聲明的識別碼在其作用域內優先。
要存取頂層變數和局部變量,可以使用不同的名稱或採用以下解決方法之一:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
此方法在創建局部變數之前保存頂級常數或變數的值.
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
此方法提供了另一種透過定義返回其值的函數來存取頂級變數的方法。
兩種方法返回相同的輸出:
Jobs Yosua
這表明您可以訪問頂級變量,同時仍然使用同名的局部變量,方法是使用這些解決方法之一。然而,重要的是要記住,局部變數在其範圍內優先於頂級標識符。
以上是Go中存在同名局部變數時如何存取包級常數或變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!