簡體   English   中英

全局和局部變量名沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM