466 Stimmen

Unterschied zwischen := und = Operatoren in Go

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?

487voto

Chaos Punkte 10473

In Go wird := für Deklaration + Zuweisung verwendet, während = nur für Zuweisung verwendet wird.

Zum Beispiel ist var foo int = 10 das gleiche wie foo := 10.

306voto

Inanc Gumus Punkte 20769

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:

277voto

zzzz Punkte 83651

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.

25voto

ShuklaSannidhya Punkte 8424

:= 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).

19voto

Ralph Caraveo Punkte 9667

Der := bedeutet deklarieren und zuweisen, während das = einfach nur zuweisen bedeutet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X