Struct Initialisierung in if-Anweisungen

8

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:

%Vor%

Der Compiler sagt: syntax error: need trailing comma before newline in composite literal . Ich habe den folgenden Code gefunden, der jedoch funktioniert:

%Vor%

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.

    
Oliver 09.08.2014, 19:46
quelle

1 Antwort

10

Löse die {} Ambiguität mit Klammern. Zum Beispiel

%Vor%
  

Die Go-Programmiersprachenspezifikation

     

zusammengesetzte Literale

     

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.

    
peterSO 09.08.2014, 19:55
quelle

Tags und Links