Wie andere bereits erklärt haben, :=
gilt dies sowohl für die Erklärung als auch für die Abtretung und auch für die erneute Erklärung; und es errät ( schließt ) automatisch den Typ der Variablen.
Zum Beispiel foo := 32
ist eine Kurzform von:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * Es gibt einige Regeln: * /
★ 1. Regel:
Sie können nicht :=
aus verwenden funcs
. Dies liegt daran, dass eine Anweisung aus irgendeinem Grund mit einem Schlüsselwort beginnen sollte.
// 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. Regel:
Sie können sie nicht zweimal verwenden ( im selben Bereich ):
legal := 42
legal := 42 // <-- error
Denn :=
einleitet „eine neue Variable“ , indem es daher nicht zweimal eine zweite Variable ist neu deklarieren, so dass es illegal ist.
★ 3. Regel:
Sie können sie für Deklarationen und Zuweisungen mit mehreren Variablen verwenden:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ 4. Regel (Neuerklärung):
Sie können sie zweimal in Deklarationen mit mehreren Variablen 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, sondern lediglich den vorhandenen Variablen neue Werte zuweisen und gleichzeitig neue Variablen deklarieren. Dies wird als Neuerklärung bezeichnet .
★ 5. Regel:
Mit der kurzen Deklaration können Sie eine Variable in einem neueren Bereich deklarieren, auch wenn diese Variable bereits zuvor 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 foo := 42
ist legal, denn es erklärt foo
in some()
func Anwendungsbereich. foo = 314
ist legal, weil es nur einen neuen Wert zuweist foo
.
★ 6. Regel:
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.
Grundsätzlich gilt: Wenn Sie eine Variable einfach deklarieren möchten, können Sie sie verwenden :=
, oder wenn Sie nur eine vorhandene Variable überschreiben möchten, können Sie sie verwenden =
.
Verweise: