首頁  >  文章  >  後端開發  >  Go中存在同名局部變數時如何存取包級常數或變數?

Go中存在同名局部變數時如何存取包級常數或變數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 11:21:03833瀏覽

How to Access Package-Level Constants or Variables When a Local Variable with the Same Name Exists in Go?

在函數級變數上引用常數或包級變數

在 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中文網其他相關文章!

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