web-dev-qa-db-ja.com

Go宣言の「_」(アンダースコアコンマ)とは何ですか?

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

_, prs := m["example"]

_,」は正確に何をしており、なぜ彼らはこのような変数を宣言する代わりに

prs := m["example"]

例:マップで移動 )の一部として見つけました

80
Kansuler

戻り値のすべての変数を宣言する必要がなくなります。
これは blank identifier と呼ばれます。

次のように:

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

その他の '_'ユースケースはインポート用

戻り値を破棄するため、戻り値の1つだけをチェックする場合に役立ちます。たとえば、「 マップ内のキーの存在をテストする方法? 」のように「 効果的Go、map ":

_, present := timeZone[tz]

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

As Jsor が追加されます コメント内

「一般に受け入れられている標準」は、メンバーシップテスト変数「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
}
106
VonC

Goコンパイラでは、決して使用しない変数を作成することはできません。

for i, value := range x {
   total += value
}

上記のコードは、「iは宣言され使用されていません」というエラーメッセージを返します。

ループ内でiを使用しないため、これを次のように変更する必要があります。

for _, value := range x {
   total += value
}
53
Juni Brosas

_は空白の識別子です。割り当てられるべき値の意味は破棄されます。

ここでは、exampleキーの値が破棄されます。コードの2行目はpresenceブール値を破棄し、値をprsに格納します。
したがって、マップ内の存在のみを確認するために、値を破棄できます。これを使用して、マップをセットとして使用できます。

4
ThinkChaos

基本的に、_,は空の識別子として知られています。 GOでは、使用されていない変数を持つことはできません。

value:= rangeを使用している場合、配列を繰り返し処理するときのインスタンスとして、繰り返し処理にiの値は必要ありません。ただし、i値を省略すると、エラーが返されます。ただし、iを宣言して使用しなかった場合は、エラーも返されます。

したがって、_,を使用する必要がある場所です。

また、将来関数の戻り値が必要ない場合にも使用されます。

1
Kaveen Hyacinth

空白の識別子と呼ばれ、返される値を破棄し、参照しない場合に役立ちます

使用する場所:

  • 関数は値を返しますが、将来使用するつもりはありません
  • 繰り返したいので、使用しないi値が必要です
1
Anagha

構文が変数名を必要とするがプログラムロジックが必要としないときはいつでも、たとえば要素値のみが必要なときに不要なループインデックスを破棄するために、空白の識別子を使用できます。

抜粋:

Goプログラミング言語(Addison-Wesley Professional Computing Series)

ブライアン・W・カーニハン

この素材は著作権で保護されている場合があります。

1
koopertrooper

未使用の変数はGolangでは使用できません

他のプログラミング言語を使用している場合、これに慣れるのは少し難しいかもしれません。しかし、これによりコードがよりクリーンになります。したがって、_を使用することで、変数があることはわかっているが、それを使用したくないと言って、それについて文句を言わないコンパイラーに伝えます。 :)

0
Krishnadas PC