7

短い課題の具体的な目的がよくわかりませんが、

なぜこれを行う:

x:= 10

これも可能な場合:

var x = 10

短い割り当ての方が便利な特定のユースケースはありますか ありがとう

4

5 に答える 5

15
if x, err := fn(); err != nil {
    // do something
}

上記の場合、変数は if ステートメント内に限定されます。if 文の外にアクセスしようとするとerr、利用できません。についても同様ですx。このようにスコープを維持すると便利な場合はさまざまありますが、 の使用は:=、上記のif, switch, for.

追加の背景として、varを使用するのと同じように、グループ化も可能importです。

var (
    y = 1
    z = 2
)

varこれにより、 vsのユースケースが:=さらに引き離されます。

于 2012-09-26T23:01:17.760 に答える
2

私は:=主に、関数呼び出しの結果を受け取るための便利な構文として存在すると信じています。関数呼び出しでは、新しい変数を宣言しながら、既存の変数を再利用したいことがよくあります。

x, err := func1()
if err != nil {
    fmt.Fatal(err)
}
y, err := func2()
if err != nil {
    fmt.Fatal(err)
}

上記のコードは、少なくとも1つの新しい変数が作成され:=ている限り、既存の変数を一覧表示できるため、コンパイルされます。に置き換えてみてください。コンパイルされないことがわかります。y, err :=var y, err =

于 2012-10-15T19:31:17.427 に答える
2

例 1:

var age int = 30

例 2:

var age = 30

例 3:

age := 30

上記の例はすべて同じです。例 2例 3は、単純に型を「推測」しています。これも略語の一種です。以下は、パブリック ドメインからの抜粋です - クリエイティブ コモンズ pdf、「An Introduction To Programming In GO」、Caleb Doxsey 著

'開始値を持つ新しい変数を作成することは非常に一般的であるため、Go は短いステートメントもサポートしています。

x := "Hello World"

:と の前に=型が指定されていないことに注意してください。Go コンパイラは、変数に割り当てたリテラル値に基づいて型を推測できるため、型は必要ありません。(文字列リテラルを割り当てているため、x には文字列型が与えられます)

コンパイラは、var ステートメントを使用して推論を行うこともできます。

var x = "Hello World"

同じことが他のタイプでも機能します。

x := 5
fmt.Println(x)

通常、可能な限りこの短い形式を使用する必要があります。

于 2012-10-04T00:37:21.850 に答える
1

その場合、理由はありません。それらは同等です。

これがあれば意味がある

var i int
i = 0

したがって、より簡潔になり、型を推測できます

i := 0

しかし、それ以外はまったく同じです。

于 2012-09-26T23:07:16.663 に答える
0
x := fn()

that will make x the same type as the return type of the function fn. If you refactor your code and the return type of fn changes, x's type will be changed for free.

...and it's less typing.

于 2012-09-26T22:46:37.353 に答える