首頁 >後端開發 >Golang >當存在同名局部變數時,如何存取 Go 中的頂級常數或變數?

當存在同名局部變數時,如何存取 Go 中的頂級常數或變數?

DDD
DDD原創
2024-11-15 19:40:03825瀏覽

How do I access a top-level constant or variable in Go when a local variable with the same name exists?

引用函數作用域內的常數或包級變數

在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.

替代方案:

如果您需要同時存取頂層變數和局部變量,請考慮使用不同的名稱。但是,如果這不可行,您可以採用以下替代方法:

  1. 暫時分配給新變數:

    • 儲存分配給局部變數之前臨時變數中頂級變數的值。
    • 例如:

      cname := name
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(cname)
  2. 間接暴露頂層變數:

    • 建立一個傳回頂級變數值的函數或方法。
      func getName() string {
       return name
      }
      
      name := "Jobs"
      fmt.Println(name)
      fmt.Println(getName())
    例如:

以上是當存在同名局部變數時,如何存取 Go 中的頂級常數或變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn