ホームページ  >  記事  >  バックエンド開発  >  同じ名前のローカル変数が存在する場合、Go でトップレベルの定数または変数にアクセスするにはどうすればよいですか?

同じ名前のローカル変数が存在する場合、Go でトップレベルの定数または変数にアクセスするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-15 19:40:03703ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。