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
)
Am einfachsten ist es, den Operator (
.
) in der ersten Zeile zu belassen.\
In vielen Python-Stilrichtlinien wird auch von Zeilenfortsetzungen abgeraten. Sie können den gesamten Ausdruck in Parens einschließen, wenn Sie zwischen go und python hin und her wechseln, da diese Technik in beiden Sprachen funktioniert.quelle
Es ist eine Frage des Stils, aber ich mag:
quelle
Wie bereits erwähnt, ist dies eine Frage der Stilpräferenz. Ich verstehe, dass die Macher von Go einen Stil vorgeschlagen haben, der auf ihren Erfahrungen basiert, aus denen ich lerne, aber auch einen Teil meines eigenen Stils aus meinen Erfahrungen beibehält.
Unten ist, wie ich dies formatieren würde:
quelle