そして、私はこの種の変数宣言を理解できないようです:
_, prs := m["example"]
「_,
」が正確に何をしているのか、なぜこれらの代わりにこのような変数を宣言したのか
prs := m["example"]
(私はGo by Example:Mapsの一部としてそれを見つけました)
prs
おそらく「プレゼント」を意味します。あなたの例のコードは"example"
、m
マップ内のエントリの有無をチェックしています。
そして、私はこの種の変数宣言を理解できないようです:
_, prs := m["example"]
「_,
」が正確に何をしているのか、なぜこれらの代わりにこのような変数を宣言したのか
prs := m["example"]
(私はGo by Example:Mapsの一部としてそれを見つけました)
prs
おそらく「プレゼント」を意味します。あなたの例のコードは"example"
、m
マップ内のエントリの有無をチェックしています。
回答:
戻り値のすべての変数を宣言する必要がなくなります。
これは、空白識別子と呼ばれます。
のように:
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
これは戻り値を破棄するため、「効果的なGo、マップ」に示されている「マップ内のキーの存在をテストする方法は?」のように、戻り値の1つだけをチェックする場合に役立ちます。
_, 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
}
_
空白の識別子です。割り当てる値が破棄されることを意味します。
ここでは、example
破棄されるのはキーの値です。コードの2行目は、プレゼンスブール値を破棄し、値をに格納しますprs
。
したがって、マップ内の存在のみを確認するには、値を破棄できます。これは、マップをセットとして使用するために使用できます。
基本的に、_,
空白の識別子と呼ばれます。GOでは、使用されていない変数を持つことはできません。
value:= rangeを使用している場合、配列を反復処理するときのインスタンスとして、反復処理にi値を使用したくありません。ただし、i値を省略すると、エラーが返されます。ただし、iを宣言して使用しなかった場合も、エラーが返されます。
したがって、それが私たちが使用しなければならない場所_,
です。
また、今後関数の戻り値が必要ない場合にも使用されます。