Ecco il programma per trovare il fattoriale di un numero in Go:codice Go non viene compilato senza un'istruzione return irraggiungibile
func factorial(x uint) uint {
if x == 0 {
return 1
}
return x * (factorial(x - 1))
}
L'uscita per questa funzione quando viene chiamato in ingresso 5 è 120. Tuttavia, se aggiungo un'istruzione else
, ottengo un errore.
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
}
Errore: function ends without a return statement
ho aggiunto un return
alla fine:
func factorial(x uint) uint {
if x == 0 {
return 1
} else {
return x * (factorial(x - 1))
}
fmt.Println("this never executes")
return 1
}
e torno l'uscita prevista di 120.
Perché secondo caso causerebbe un errore? Perché nel terzo caso, anche se la funzione non raggiunge mai l'ultimo return 1
, calcola l'output corretto?
È idiomatico in Vai a usare 'if cond {return}; return' (non su una riga ovviamente). Quando si hanno cicli infiniti dove nulla dopo il ciclo non viene eseguito, l'idioma comune è aggiungere "panic (" irraggiungibile ")'. –
rende l'ultima istruzione un 'panico' ('mai raggiunto') ' – thwd