Was ist der Unterschied zwischen den =
und :=
Operatoren und was sind die Anwendungsfälle für sie? Sie scheinen beide für eine Zuweisung zu sein?
Antworten
Zu viele Anzeigen?TLDR:
- Deklariere eine Variable, nutze:
:=
. - Ändere den Wert einer Variable, nutze:
=
.
Es gibt einige Regeln und der TLDR trifft nicht immer zu.
Wie bereits von anderen erklärt, ist :=
sowohl für Deklaration, Zuweisung als auch für die Neudeklaration gedacht und errät (schließt ab) automatisch den Typ der Variable.
Zum Beispiel ist foo := 32
eine Kurzform von:
var foo int
foo = 32
// ODER:
var foo int = 32
// ODER:
var foo = 32
/ Hier sind die Regeln: /
1st Regel:
Du kannst :=
außerhalb von funcs
nicht verwenden. Das liegt daran, dass außerhalb einer Funktion eine Anweisung mit einem Schlüsselwort beginnen sollte.
// keine Schlüsselwörter unten, illegal.
illegal := 42
// `var` Schlüsselwort macht diese Anweisung legal.
var legal = 42
func foo() {
alsoLegal := 42
// Grund: es ist im Funktionsbereich.
}
2nd Regel:
Du kannst sie nicht zweimal verwenden (im selben Bereich):
legal := 42
legal := 42 // <-- Fehler
Weil :=
eine "eine neue Variable" einführt, wird durch die Verwendung zweimal keine zweite Variable neu deklariert, daher ist es illegal.
3rd Regel:
Du kannst sie für Mehrfachdeklarationen und -zuweisungen verwenden:
foo, bar := 42, 314
jazz, bazz := 22, 7
4th Regel (Neudeklaration):
Du kannst sie zweimal in "Mehrfachvariablen"deklarationen verwenden, wenn eine der Variablen neu ist:
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz ist neu
baz, foo := someFunc() // <-- baz ist neu
Dies ist legal, weil du nicht alle Variablen deklarierst, sondern einfach neuen Werten die vorhandenen Variablen zuweist und gleichzeitig neue Variablen deklarierst. Dies wird als Neudeklaration bezeichnet.
5th Regel:
Du kannst die Kurzdeklaration verwenden, um eine Variable in einem neuen Bereich zu deklarieren, auch wenn diese Variable bereits mit demselben Namen zuvor deklariert wurde:
var foo int = 34
func some() {
// weil foo hier auf die Funktion some beschränkt ist
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Hier ist foo := 42
legal, weil es foo
im Bereich der Funktion some()
deklariert. foo = 314
ist legal, weil es einfach einen neuen Wert an foo
zuweist.
6th Regel:
Du kannst denselben Namen in kurzen Anweisungsblöcken wie: If, For, Switch deklarieren:
foo := 42
if foo := someFunc(); foo == 314 {
// foo gehört hier zu 314
// ...
}
// foo ist immer noch 42 hier
Weil foo
in If foo := ...
nur zu diesem If
-Block gehört und es sich um einen anderen Bereich handelt.
Verweise:
Nur =
ist der Zuweisungsoperator.
:=
ist ein Teil der Syntax der kurzen Variablendeklaration Klausel.
Es gibt jedoch einige Regeln. Siehe diese andere Antwort für weitere Details.
:=
ist eine Kurzform für eine Deklaration.
a := 10
b := "gopher"
a
wird als int
deklariert und mit dem Wert 10
initialisiert, während b
als Zeichenfolge deklariert und mit dem Wert gopher
initialisiert wird.
Ihre Äquivalente mit =
wären
var a = 10
var b = "gopher"
=
ist der Zuweisungsoperator. Er wird auf die gleiche Weise verwendet, wie man es in jeder anderen Sprache tun würde.
Sie können den Typ beim Deklarieren der Variablen weglassen, wenn ein Initialisierer vorhanden ist (http://tour.golang.org/#11).
- See previous answers
- Weitere Antworten anzeigen