短い課題の具体的な目的がよくわかりませんが、
なぜこれを行う:
x:= 10
これも可能な場合:
var x = 10
短い割り当ての方が便利な特定のユースケースはありますか ありがとう
短い課題の具体的な目的がよくわかりませんが、
なぜこれを行う:
x:= 10
これも可能な場合:
var x = 10
短い割り当ての方が便利な特定のユースケースはありますか ありがとう
if x, err := fn(); err != nil {
// do something
}
上記の場合、変数は if ステートメント内に限定されます。if 文の外にアクセスしようとするとerr
、利用できません。についても同様ですx
。このようにスコープを維持すると便利な場合はさまざまありますが、 の使用は:=
、上記のif
, switch
, for
.
追加の背景として、var
を使用するのと同じように、グループ化も可能import
です。
var (
y = 1
z = 2
)
var
これにより、 vsのユースケースが:=
さらに引き離されます。
私は:=
主に、関数呼び出しの結果を受け取るための便利な構文として存在すると信じています。関数呼び出しでは、新しい変数を宣言しながら、既存の変数を再利用したいことがよくあります。
x, err := func1()
if err != nil {
fmt.Fatal(err)
}
y, err := func2()
if err != nil {
fmt.Fatal(err)
}
上記のコードは、少なくとも1つの新しい変数が作成され:=
ている限り、既存の変数を一覧表示できるため、コンパイルされます。に置き換えてみてください。コンパイルされないことがわかります。y, err :=
var y, err =
例 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)
通常、可能な限りこの短い形式を使用する必要があります。
その場合、理由はありません。それらは同等です。
これがあれば意味がある
var i int
i = 0
したがって、より簡潔になり、型を推測できます
i := 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.