[英]Clashing global and local variable name
這是有問題的代碼段:
package main
import (
"fmt"
)
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
a := "bye"
fmt.Println(a, b)
}
輸出:
hello world
bye world
我的問題是,如何解決“全局”和“局部”變量a
之間的名稱沖突?
更具體地說,我如何告訴Go使用哪個a
?
我認為您的原始示例很好地說明了這種情況。 就像大多數編程語言一樣,范圍也很重要。
最接近用途的范圍是決定a
值的因素。 因此,如果您在函數內部重新聲明( :=
)變量,則在該函數的持續時間內,您將擁有"bye"
值。
如果您選擇對兩個事物使用相同的名稱,那么結果就是內部名稱將始終占主導地位。 如果您需要兩個值,請分別命名變量。
好吧,這實際上不是解決方案,而是一種解決方法。 在創建陰影變量之前,可以創建一個指向外部變量的指針。
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
pa := &a
a := "bye"
fmt.Println(*pa, b, a)
}
這稱為可變陰影。 您只是使用不同的名稱。
您不能只是要求去表現不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.