Valori Multipli di Ritorno
Una funzione può ritornare più valori , che sono assegnati rispettivamente alle variabili riceventi.
Esempio
(130multiple-return-values.go):
package main
import "fmt"
// Funzione che ritorna due valori interi
func vals() (int, int) {
return 3, 7
}
func main() {
// Invocazione di funzione con due valori
// di ritorno
a, b := vals()
fmt.Println(a)
fmt.Println(b)
// il primo valore, come segnaposto
_, c := vals()
fmt.Println(c)
}
// TODO: named return parameters
// TODO: naked returns
Ritorno di errore
Per convenzione l'ultimo valore ritornato è un errore. Questo da modo di affrontare situazioni non corrette senza causare un panic a runtime.
Il Go non ha gestione eccezioni, cioè non esistono segmenti try ... catch
come altri linguaggi. Seguendo la buona pratica di fornire errori nei valori di ritorno delle funzioni e di testarli nel codice chiamante si impedisce il verificarsi di situazioni altrimenti fatali.
(131-error-return.go):
package main
import "fmt"
import "errors"
func main() {
res, err := divide(10, 0)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(res)
}
}
func divide(x, y int) (res int, err error) {
if y == 0 {
return 0, errors.New("divide by zero")
}
return x / y, nil
}
Notare che un error è un oggetto complesso del package errors. Come tale va creato con la funzione new
.
Potevamo certo decidere in questo programma di usare una stringa o un booleano, ma è sempre meglio conformarsi a features già esistenti.