Condizioni di test con espressioni if/else
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.