Go 宣言における「_,」(アンダースコア カンマ)とは何ですか? 質問する

Go 宣言における「_,」(アンダースコア カンマ)とは何ですか? 質問する

そして、私はこの種の変数宣言を理解できないようです:

_, prs := m["example"]

「 」は一体何を_,しているのでしょうか?なぜこのような変数を宣言したのでしょうか?

prs := m["example"]

(私はこれをGo の例: マップ

ベストアンサー1

戻り値のすべての変数を宣言する必要がなくなります。
これは空白の識別子

例えば:

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

そうすれば、使用しない変数を宣言する必要がなくなります。Go ではそれが許可されません。代わりに、'_' を使用してその変数を無視します。

(のその他の「_」使用例はインポート用です

戻り値を破棄するので、「マップ内のキーの存在をテストするにはどうすればいいですか?「」に表示効果的な囲碁、マップ「:」

_, present := timeZone[tz]

実際の値を気にせずにマップ内に存在するかどうかをテストするには、空白の識別子、つまり単純なアンダースコア ( _) を使用できます。
空白の識別子は、任意の型の任意の値を割り当てたり宣言したりすることができ、値は問題なく破棄されます。
マップ内に存在するかどうかをテストするには、値の通常の変数の代わりに空白の識別子を使用します。

としてジェソル追加コメント欄:

「一般的に受け入れられている標準」は、メンバーシップ テスト変数を「ok」と呼ぶことです (チャネルの読み取りが有効かどうかをチェックする場合も同様です)

これにより、テストと組み合わせることができます。

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

ループ内でも見つかります:

範囲内の 2 番目の項目 (値) のみが必要な場合は、空白の識別子 (アンダースコア) を使用して最初の項目を破棄します。

sum := 0
for _, value := range array {
    sum += value
}

おすすめ記事