在Go 中,可以宣告具有不同作用域的變數:本地(函數作用域)和頂層(包或文件範圍)。有時,您可能會遇到這樣的情況:您想要引用函數作用域內的頂級常數或變量,其中存在同名的局部變數。
請考慮以下程式碼片段:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
問題:如何引用常數名稱而不是局部變數?
答案:
存取存在的封閉作用域變數不可能使用相同名稱的局部變數。當局部變數在作用域內時,它會遮蔽函數內的外部變量,使其無法存取。
Go 語言規範規定:
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
替代方案:
如果您需要同時存取頂層變數和局部變量,請考慮使用不同的名稱。但是,如果這不可行,您可以採用以下替代方法:
暫時分配給新變數:
例如:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
間接暴露頂層變數:
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
以上是當存在同名局部變數時,如何存取 Go 中的頂級常數或變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!