In letzter Zeit habe ich mit Googles neuer Programmiersprache Go gespielt
und fragte sich, warum der Zuweisungsoperator :=
einen Doppelpunkt vor dem Gleichheitszeichen hat. =
Gibt es einen bestimmten Grund, warum die Autoren der Sprache name := "John"
anstelle von verwenden wollten ?name = "John"
Antworten:
Die
:=
Notation dient sowohl als Deklaration als auch als Initialisierung.foo := "bar"
ist äquivalent zu
var foo = "bar"
Warum nicht nur
foo = "bar"
wie in einer beliebigen Skriptsprache verwenden? Nun, das ist, um Tippfehler zu vermeiden.foo = "bar" fooo = "baz" + foo + "baz" // Oops, is fooo a new variable or did I mean 'foo' ?
quelle
name := "John"
ist nur syntaktischer Zucker für
var name string name = "John"
Go ist statisch typisiert, daher müssen Sie Variablen deklarieren.
quelle
name := "John"
ist eine Abkürzung fürvar name = "John"
.var name = "John"
kurz,var name string = "John"
was für die beiden angegebenen Zeilen kurz ist."var" IdentifierList = ExpressionList .
".:=
ist nicht der Zuweisungsoperator. Es ist eine kurze Variablendeklaration.=
ist der Zuweisungsoperator.In Go
name := "John"
ist Abkürzung fürvar name = "John"
.quelle
Rob Pike erklärt, warum Go
:=
während seines Vortrags "Origins of Go" (2010) hat.:=
war ein Pseudooperator in einer anderen von Pike codierten Sprache namens Newsquek (1989). Welches hatte Pascal-ish Notation und die Fähigkeit, Typ für die Deklaration und Initialisierung der Sprache abzuleiten ( Seite 15 )// variable: [type] = value x: int = 1 x := 1
Randnotiz: Robert Griesemer spricht den
:=
Operator an und beantwortet die Frage "Was würden Sie aus Go herausnehmen?" während der QS-Sitzung bei Google I / O 2013. Als praktisch, aber problematisch bezeichnet .quelle
Beides ist die unterschiedliche Technik der Variablendeklaration in der Go-Sprache.
var name = "John" // is a variable declaration
UND
name := "John" // is a short variable declaration.
Eine kurze Variablendeklaration ist eine Abkürzung für eine reguläre Variablendeklaration mit Initialisiererausdrücken, aber ohne Typen.
Lesen Sie unten für Details:
Variablendeklarationen
Kurze Variablendeklarationen
quelle
Es gibt mindestens einen subtilen Unterschied zwischen
name := "John"
und
var name = "John"
Ersteres ist eine Nichtdeklarationsanweisung und außerhalb eines Funktionskörpers nicht zulässig, während letzteres eine gültige Anweisung auf Paketebene ist.
quelle
Wichtiger Kontext für die Antwort:
:=
ist ein Kurzoperator zum Initialisieren einer Variablen. In Go sind die folgenden Operationen äquivalent:var myNumb String = "one" myNumb := "one"
Antworten:
Die implizite Frage lautet nun: "Warum hat go die Kurzschreibweise so entworfen
:=
, dass sie:
vor dem steht=
?". Der Grund ist, häufige Tippfehler zu vermeiden. Wenn der Kurzzuweisungsoperator nur war=
, könnte die folgende Situation auftreten:var myNumb String = "one" myNumb = "two"
Nun hat der Benutzer, der diesen Code erstellt beabsichtigt neu zuweisen
two
zumyNumb
, oder hat er falsch eingeben ,myNumb
anstatt richtig tippenmyNumbTwo
? Durch das Einfügen des Doppelpunkts in:=
müsste der Programmierer zwei Fehler begehen (den Doppelpunkt vergessen und den vergessenvar
), um einen Fehler zu erhalten, wodurch die Wahrscheinlichkeit drastisch verringert wird .quelle