Ich möchte prüfen, ob eine Struktur leer ist, d. h. wenn alle Felder auf ihren Standardwert gesetzt sind. Folgendes funktioniert wie erwartet:
%Vor%Ich wollte das etwas verkürzen, also habe ich die leere struct-Initialisierung in die if-Anweisung verschoben:
%Vor% Aber das funktioniert nicht: syntax error: unexpected }, expecting := or = or comma
. Selbst das Folgende funktioniert nicht, obwohl es fast wie im ersten Beispiel aussieht:
Der Compiler sagt: syntax error: need trailing comma before newline in composite literal
. Ich habe den folgenden Code gefunden, der jedoch funktioniert:
Kann jemand erklären, warum die beiden obigen Beispiele vom Compiler nicht akzeptiert werden? Und während wir dabei sind: Was ist der idiomatische Weg, um nach einer "leeren" Struktur zu suchen? Das letzte Beispiel funktioniert, sieht aber etwas komisch aus.
Löse die {}
Ambiguität mit Klammern. Zum Beispiel
Die Go-Programmiersprachenspezifikation
Eine Parsing-Mehrdeutigkeit tritt auf, wenn ein zusammengesetztes Literal den TypeName verwendet Form des LiteralType erscheint als Operand zwischen dem Schlüsselwort und die öffnende Klammer des Blocks eines "wenn", "für" oder "Schalter" Anweisung, und das zusammengesetzte Literal ist nicht in Klammern eingeschlossen, eckige Klammern oder geschweifte Klammern. In diesem seltenen Fall die öffnende Klammer des Literals wird fälschlicherweise als derjenige interpretiert, der den Block einführt von Aussagen. Um die Mehrdeutigkeit aufzulösen, muss das zusammengesetzte Literal erscheinen in Klammern.
Tags und Links go struct if-statement