1. ホーム
  2. variables

[解決済み] Go宣言の"_,"(アンダースコア・カンマ)とは何ですか?

2022-10-11 20:06:04

質問

また、このような変数の宣言が理解できないようです。

_, prs := m["example"]

"とは一体何なのか。 _, の代わりに、なぜこのような変数を宣言したのでしょうか?

prs := m["example"]

(の一部として見つけました)。 例によって行く。地図 )

解決方法は?

戻り値のための変数をすべて宣言する必要がなくなります。

というものです。 空白の識別子 .

のように。

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

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

(その 他の' _ ' のユースケースは、インポート )

戻り値を破棄するので、"のように戻り値のうち1つだけを確認したい場合に便利です。 マップにキーが存在するかどうかを調べるには? で示した "。 効果的な囲碁、マップ "で表示されます。

_, present := timeZone[tz]

実際の値を気にせずにマップ内に存在するかどうかをテストするには、空白の識別子、単純なアンダースコア ( _ ).

空白の識別子は、任意の型の任意の値を代入または宣言することができ、値は無害に破棄されます。

マップ内の存在をテストするために、値のための通常の変数の代わりに空白の識別子を使用します。

として Jsor をコメントとして追加します。 :

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

それによって、testと組み合わせることができます。

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

loopの中にもありますね。

<ブロッククオート

範囲の2番目の項目(値)だけが必要な場合は、空白の識別子であるアンダースコアを使って、1番目の項目を破棄します。

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