link

Logo for Markus Rennings

if/else in Go

Wie in (fast?) jeder Programmiersprache, gibt es auch in Go ein if/else-Konstrukt. Dies ist recht selbsterklärend, so wie man es auch aus anderen Sprachen kennt:

if i < f {
    fmt.Println("i ist kleiner als f")
}

Die geschweiften Klammern sind Pflicht, runde Klammern um den zu prüfenden Ausdruck jedoch nicht. Laut offizieller Doku (engl.) soll man durch die geschweiften Klammern »ermutigt« werden, auch einfache if-Statements über mehrere Zeilen zu schreiben.

Genauso einfach sieht dann das if/else, bzw. auch ein if/else if/ aus:

if laenge > 180 {
    fmt.Println("Lang genug")
} else if laenge > 150 {
    fmt.Println("Noch genug")
} else {
    fmt.Println("Zu kurz")
}

Ansonsten hat auch Go die üblichen Vergleiche:

#Initial statement

Anders als in anderen Sprachen, kann eine if-Abfrage in Go ein »initial statement« haben. Die Variable, die hier dann definiert wird, gilt nur innerhalb der Gültigkeit des if-Blocks (scope). Allgemein sieht die Syntax dann so aus:

if INITIAL_STATEMENT ; bedingung {
    // some code
}

Dies ist einer der wenigen Fälle in Go, wo das Semikolon Pflicht ist. Doch wofür nutzt man es? Oder ist es nur »syntactic sugar«? Anstatt

length := getLength(objekt)
if length < 1 {
    fmt.Println("Fehler")
}

kann man

if length := getLength(objekt); length < 1 {
    fmt.Println("Fehler")
}

schreiben. Ob das jetzt lesbarer ist? Wahrscheinlich nicht. Der Vorteil ist aber, dass die Variable length nicht im Gültigkeitsbereich der Funktion ist, sondern im Scope vom »if«. Dadurch kann sie nach dem if-Statement auch vom Garbage Collector abgeräumt werden.