Was ist der Unterschied zwischen dem =
- und dem :=
-Operator in Go? Sie scheinen beide für den Auftrag zu sein? Das mag offensichtlich sein, aber ich finde es in den Dokumenten nicht.
Nur =
ist der Zuweisungsoperator.
:=
ist eigentlich kein Operator überhaupt. Sie ist Teil der Syntax der Short-Variablendeklarationen .
In Go ist :=
für Deklaration + Zuweisung, während =
nur für Zuweisung gilt.
Beispielsweise ist var foo int = 10
dasselbe wie foo := 10
.
Wie bereits erläutert, ist :=
sowohl für die Deklaration als auch für die Zuweisung und auch für die Redeklaration gedacht. und erraten (inferieren) automatisch den Typ der Variablen.
Es ist eine Kurzform von:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
Sie können :=
nicht aus funcs
verwenden. Dies liegt daran, dass aus irgendeinem Grund eine Anweisung mit einem Schlüsselwort beginnen sollte.
illegal := 42
func foo() {
legal := 42
}
Sie können sie nicht zweimal verwenden (im selben Geltungsbereich):
legal := 42
legal := 42 // <-- error
Da :=
"eine neue Variable" einführt, wird eine zweite Variable nicht zweimal deklariert, daher ist sie illegal.
Sie können sie jedoch zweimal in "multi-variable" Deklarationen verwenden, wenn eine der Variablen neu ist:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Dies ist legal, da Sie nicht alle Variablen deklarieren. Sie müssen lediglich den vorhandenen Variablen neue Werte zuweisen und gleichzeitig neue Variablen deklarieren.
Sie können die Kurzdeklaration verwenden, um eine Variable in einem neueren Bereich zu deklarieren, selbst wenn diese Variable bereits mit demselben Namen deklariert wurde:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Hier ist foo := 42
zulässig, da er foo
im Funktionsumfang von some()
func deklariert. foo = 314
ist legal, da foo
nur ein neuer Wert zugewiesen wird.
Sie können sie für Deklarationen und Zuweisungen mit mehreren Variablen verwenden:
foo, bar := 42, 314
jazz, bazz := 22, 7
Sie können denselben Namen in kurzen Anweisungsblöcken deklarieren wie: if, for, switch:
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Weil foo
in if foo := ...
nur zu dieser if
-Klausel gehört und sich in einem anderen Bereich befindet.
Als allgemeine Regel: Wenn Sie eine Variable einfach deklarieren möchten, können Sie :=
verwenden. Wenn Sie einen vorhandenen Wert überschreiben möchten, können Sie =
verwenden.
:=
ist eine Abkürzung für die Deklaration.
a := 10
b := "Gopher"
a
wird als int
deklariert und mit dem Wert 10
initialisiert, wobei b
als String deklariert und mit dem Wert Gopher
initialisiert wird.
Ihre Entsprechungen mit =
wären
var a = 10
var b = "Gopher"
=
ist Zuweisungsoperator. Es wird genauso verwendet wie in anderen Sprachen.
Sie können den Typ weglassen, wenn Sie die Variable deklarieren und ein Initialisierer vorhanden ist ( http://tour.golang.org/#11 ).
:=
deklariert und weist zu, =
weist einfach zu
Dies ist nützlich, wenn Sie Ihren Code nicht mit Typ- oder Strukturdeklarationen füllen möchten.
// 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)
Das: = bedeutet deklarieren und zuweisen, während das = = einfach zuordnen soll.
aus dem Referenzdokument: ( tour.golang.org )
Innerhalb einer Funktion kann die :=
-Kurzzuweisungsanweisung anstelle einer var-Deklaration mit implizitem Typ verwendet werden.
Außerhalb einer Funktion beginnt jedes Konstrukt mit einem Schlüsselwort (var, func usw.) und das Konstrukt: = ist nicht verfügbar.
“: =” Wird verwendet, um gleichzeitig Deklaration und Initialisierung durchzuführen. Das folgende Beispiel ist ein Beispiel.
Verwendung von "="
var i int
i = 10
https://play.golang.org/p/RU88ty_SGa
Verwendung von ": ="
i: = 10
Beides ist die unterschiedliche Technik der Variablendeklaration in der Go-Sprache.
var firstName := "John" // is a variable declaration
UND
firstName := "John" // is a short variable declaration.
Eine kurze Variablendeklaration ist eine Abkürzung für eine reguläre Variablendeklaration mit Initialisierungsausdrücken, jedoch ohne Typen.
Lesen Sie unten für Details:
Wie schon gesagt - Das: = bedeutet deklarieren und zuordnen; das = bedeutet einfach zuweisen. Wichtiger Hinweis hier ist, wenn Sie in Funktion sind
foo := 2.5
dann entscheidet Go, ob foo float32 oder float64 basierend auf mehreren Dingen ist. Wenn Sie jedoch als float64 entschieden und kompiliert wurden, können Sie foo nicht als float32 und umgekehrt verwenden. Daher ist es manchmal besser, die vollständige Syntax zu verwenden.