Condizioni di test con espressioni if/else

Completato

Il flusso di controllo più semplice in qualsiasi linguaggio di programmazione è rappresentato dalle istruzioni if/else. In Go, le istruzioni if/else sono di immediata comprensione. È tuttavia necessario capire alcune differenze prima di sentirsi a proprio agio con la scrittura di programmi Go.

Di seguito verrà presentata la sintassi di Go per le istruzioni if.

Sintassi per le istruzioni If

Diversamente da altri linguaggi di programmazione, in Go non sono necessarie le parentesi nelle condizioni. La clausola else è facoltativa. Ma le parentesi graffe sono ancora obbligatorie. Inoltre, Go non supporta le istruzioni if ternarie per ridurre le righe, quindi è necessario scrivere l'istruzione if completa ogni volta.

Di seguito è riportato un semplice esempio di istruzione if:

package main

import "fmt"

func main() {
    x := 27
    if x%2 == 0 {
        fmt.Println(x, "is even")
    }
}

In Visual Studio Code, se la sintassi Go include le parentesi nelle condizioni, le parentesi vengono rimosse automaticamente quando si salva il programma.

Istruzioni if composte

Go supporta istruzioni if composte. È possibile annidare le istruzioni usando l'istruzione else if. Ecco un esempio:

package main

import "fmt"

func givemeanumber() int {
    return -1
}

func main() {
    if num := givemeanumber(); num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has only one digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
}

In questo codice si noti che la variabile num archivia il valore restituito dalla funzione givemeanumber() e la variabile è disponibile in tutti i rami if. Tuttavia, se si prova a stampare il valore della variabile num all'esterno del blocco if, si otterrà un errore di questo tipo:

package main

import "fmt"

func somenumber() int {
    return -7
}
func main() {
    if num := somenumber(); num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }

    fmt.Println(num)
}

Quando si esegue il programma, l'output dell'errore è simile al seguente:

# command-line-arguments
./main.go:17:14: undefined: num

In Go la dichiarazione di variabili all'interno if di blocchi è idiomatica. È un modo per programmare in modo efficace usando una convenzione comune in Go.