Zuerst einige Hintergrundinformationen. Die formale Grammatik von Go verwendet ";"
in vielen Produktionen Semikolons als Terminatoren, aber Go-Programme lassen möglicherweise die meisten davon weg (und sie sollten eine klarere, leicht lesbare Quelle haben;gofmt
entfernt auch unnötige Semikolons).
In der Spezifikation sind die genauen Regeln aufgeführt. Spezifikation: Semikolons:
Die formale Grammatik verwendet Semikolons ";" als Terminatoren in einer Reihe von Produktionen. Go-Programme können die meisten dieser Semikolons nach den folgenden zwei Regeln weglassen:
Wenn die Eingabe in Token aufgeteilt wird, wird unmittelbar nach dem letzten Token einer Zeile automatisch ein Semikolon in den Token-Stream eingefügt, wenn dies der Fall ist
Damit komplexe Anweisungen eine einzelne Zeile belegen können, kann vor einem schließenden ")" oder "}" ein Semikolon weggelassen werden.
Wie Sie sehen können, wenn Sie nach der Klammer ein Zeilenumbruchzeichen einfügen )
, ;
wird automatisch ein Semikolon eingefügt, sodass die nächste Zeile nicht als Fortsetzung der vorherigen Zeile behandelt wird. Dies ist in Ihrem Fall geschehen, und daher .Scan(&ReadUser.ID,...
gibt Ihnen die nächste Zeile, die mit beginnt , einen Fehler bei der Kompilierung, da dieser für sich steht (ohne die vorherige Zeile) ist ein Fehler bei der Kompilierung:syntax error: unexpected .
Sie können Ihre Linie also an jedem Punkt brechen, der nicht mit den unter Punkt 1.
oben aufgeführten Regeln in Konflikt steht .
Normalerweise können Sie Ihre Linien hinter dem Komma brechen ,
, nach dem Öffnen Klammer zum Beispiel (
, [
, {
und nach einem Punkt , .
die ein Feld oder eine Methode von einigem Wert sein können referenzieren. Sie können Ihre Zeile auch nach binären Operatoren (die 2 Operanden erfordern) unterbrechen, z.
i := 1 +
2
fmt.Println(i) // Prints 3
Hier ist zu beachten, dass Sie ein obligatorisches Komma setzen müssen, wenn Sie ein Struktur-, Slice- oder Map-Literal haben, in dem die Anfangswerte aufgelistet sind, und nach dem Auflisten des letzten Werts die Linie unterbrechen möchten, ,
obwohl dies der letzte Wert und Nein ist Weitere werden folgen, zB:
s := []int {
1, 2, 3,
4, 5, 6, // Note it ends with a comma
}
Dies entspricht den Semikolonregeln und ermöglicht es Ihnen, neue Zeilen neu anzuordnen und hinzuzufügen, ohne sich um das Hinzufügen / Entfernen des endgültigen Kommas kümmern zu müssen. Sie können beispielsweise einfach die 2 Zeilen austauschen, ohne ein neues Komma entfernen und hinzufügen zu müssen:
s := []int {
4, 5, 6,
1, 2, 3,
}
Gleiches gilt für die Auflistung von Argumenten zu einem Funktionsaufruf:
fmt.Println("first",
"second",
"third", // Note it ends with a comma
)