Goでは、=
と:=
演算子の違いは何ですか?彼らは両方とも割り当てのようですか?これは明らかかもしれませんが、ドキュメントで見つけることができないようです。
Goでは、:=
は宣言+割り当て用ですが、=
は割り当て専用です。
たとえば、var foo int = 10
はfoo := 10
と同じです。
他の人がすでに説明したように、:=
は宣言、割り当て、および再宣言の両方に使用されます。そして、変数の型を自動的に推測します(infer)。
次の短縮形です。
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
funcs
から:=
を使用することはできません。これは、funcのうち、ステートメントはキーワードで始まる必要があるためです。
illegal := 42
func foo() {
legal := 42
}
これらを2回使用することはできません(同じスコープ内):
legal := 42
legal := 42 // <-- error
なぜなら、:=
は "a new variable"を導入するため、2回使用しても2番目の変数を再宣言しないため、違法です。
ただし、 "multi-variable"宣言で2回使用できます。変数の1つが新しい場合:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
すべての変数を宣言するのではなく、既存の変数に新しい値を再割り当てし、同時に新しい変数を宣言するだけなので、これは正当です。
短い宣言を使用して、新しいスコープで変数を宣言できます。その変数は、同じ名前で既に宣言されています:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
ここで、foo := 42
は正当です。なぜなら、some()
funcのスコープでfoo
を宣言しているからです。 foo = 314
は、foo
に新しい値を割り当てるだけなので、正当です。
これらを複数変数の宣言と割り当てに使用できます。
foo, bar := 42, 314
jazz, bazz := 22, 7
次のような短いステートメントブロックで同じ名前を宣言できます:if、for、switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
なぜなら、if foo := ...
のfoo
は、そのif
句にのみ属し、別のスコープ内にあるためです。
したがって、一般的なルールとして:変数を簡単に宣言したい場合は:=
を使用できます。または、既存の値を上書きしたい場合は、 =
を使用できます。
参照:
:=
は宣言の省略形です。
a := 10
b := "Gopher"
a
はint
として宣言され、値10
で初期化されますが、b
は文字列として宣言され、値Gopher
で初期化されます。
=
を使用した同等のものは
var a = 10
var b = "Gopher"
=
は代入演算子です。他の言語で使用するのと同じ方法で使用されます。
変数を宣言し、初期化子が存在する場合は、タイプを省略できます( http://tour.golang.org/#11 )。
:=
は宣言して割り当て、=
は単に割り当てます
コードをtypeまたはstruct宣言で埋めたくない場合に便利です。
// Usage with =
var i int
var U, V, W float64
var k = 0
var x, y float32 = -1, -2
// Usage with :=
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
:=はandを宣言することを意味し、=は単に割り当てることを意味します。
参照ドキュメントから:( tour.golang.org )
関数内では、:=
短い代入ステートメントを暗黙的な型のvar宣言の代わりに使用できます。
関数の外部では、すべての構造体はキーワード(var、funcなど)で始まり、:=構造体は使用できません。
「:=」は、宣言と初期化を同時に行うために使用します。以下に例を示します。
「=」の使用
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
「:=」の使用
i:= 10
多くの人がすでに言っているように-:=は宣言と割り当てを意味します。 =は単に割り当てることを意味します。ここで重要なのは、機能する場合は
foo := 2.5
goはfooがいくつかのことに基づいてfloat32またはfloat64であるかどうかを決定しますが、一度決定してfloat64としてコンパイルすると、fooをfloat32として使用できません。したがって、完全な構文を使用した方がよい場合があります。