=
と:=
演算子の違いは何ですか?それらの使用例は何ですか?彼らは両方とも任務に思われるのですか?
x := uint32(123)
機能します。ほとんどの人にとってそれは明白なはずですが、私は数分考えなければなりませんでした;-)
=
と:=
演算子の違いは何ですか?それらの使用例は何ですか?彼らは両方とも任務に思われるのですか?
x := uint32(123)
機能します。ほとんどの人にとってそれは明白なはずですが、私は数分考えなければなりませんでした;-)
回答:
Goでは:=
、宣言+割り当て=
用ですが、割り当てのみです。
たとえばvar foo int = 10
、はと同じfoo := 10
です。
=
対照的なユースケースはあり:=
ますか?あなたはいつもいつも使うべきです:=
か?
:=
では、一度に複数の変数に割り当てており、それらの変数の少なくとも1つが新しいものでない限り、すでに宣言されている変数に割り当てることはできません。
int
は必須でvar foo = 10
はありません。同じですfoo := 10
他の人がすでに説明したよう:=
に、宣言、割り当て、および再宣言の両方のためです。変数の型を自動的に推測(推測)します。
たとえば、foo := 32
は以下の省略形です。
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ *いくつかのルールがあります:* /
★第1規則:
:=
からは使用できませんfuncs
。これは、すべてのfuncのうち、ステートメントはキーワードで始まる必要があるためです。
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
★第2規則:
それらを2回(同じスコープ内で)使用することはできません。
legal := 42
legal := 42 // <-- error
「新しい変数」が:=
導入されるため、2回使用しても2番目の変数が再宣言されないため、これは違法です。
★3番目のルール:
これらを多変数の宣言と代入に使用できます。
foo, bar := 42, 314
jazz, bazz := 22, 7
★4番目のルール(再宣言):
変数の1つが新しい場合は、「複数変数」宣言で2回使用できます。
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
すべての変数を宣言するのではなく、既存の変数に新しい値を再割り当てし、同時に新しい変数を宣言するだけなので、これは合法です。これは再宣言と呼ばれます。
★5番目のルール:
短い宣言を使用して、その変数が同じ名前ですでに宣言されている場合でも、新しいスコープで変数を宣言できます。
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
funcのスコープfoo := 42
で宣言foo
しているため、ここでは合法some()
です。foo = 314
新しい値をに割り当てるだけなので、合法foo
です。
★6番目のルール:
:あなたは、のような短い文のブロックに同じ名前を宣言することができるならば、ため、スイッチ:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
、そのためfoo
にif foo := ...
だけそれに属し、if
句とそれは別のスコープにあります。
そのため、一般的なルールとして、使用できる変数を簡単に宣言したい場合
:=
、または既存の変数を上書きしたいだけの場合は、を使用できます=
。
参照:
:=
宣言の省略形です。
a := 10
b := "gopher"
a
として宣言され、int
value 10
でb
初期化されます。asは文字列として宣言され、valueで初期化されますgopher
。
同等のものを使用=
すると
var a = 10
var b = "gopher"
=
代入演算子です。他の言語で使用するのと同じように使用されます。
変数を宣言し、初期化子が存在する場合は、タイプを省略できます(http://tour.golang.org/#11)。
=
比較のためで:=
あり、割り当てのためのAdaを除いて...
参照ドキュメントから:(tour.golang.org)
関数内、:=
短い代入文は、暗黙的な型とのvar宣言の代わりに使用することができます。
関数の外では、すべての構成要素はキーワード(var、funcなど)で始まり、:=構成要素は使用できません。
「:=」は、宣言と初期化を同時に行うために使用します。以下に例を示します。
「=」の使用法
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
「:=」の使用
i:= 10
どちらもGo言語での変数宣言の異なる手法です。
var firstName = "John" // is a variable declaration
そして
firstName := "John" // is a short variable declaration.
短い変数宣言は、初期化子式を含むが型を持たない通常の変数宣言の省略形です。
詳細については以下をお読みください: