Go
Valori zero
Ricerca…
Spiegazione
I valori zero o l'inizializzazione zero sono semplici da implementare. Provenendo da lingue come Java può sembrare complicato che alcuni valori possano essere nil
mentre altri no. In sintesi da Zero Value: The Go Programming Language Specification :
Puntatori, funzioni, interfacce, sezioni, canali e mappe sono gli unici tipi che possono essere nulli. Il resto viene inizializzato su false, zero o stringhe vuote in base ai rispettivi tipi.
Se una funzione che controlla alcune condizioni, potrebbero sorgere problemi:
func isAlive() bool {
//Not implemented yet
return false
}
Il valore zero sarà falso anche prima dell'implementazione. Test unitari dipendenti dal ritorno di questa funzione potrebbero dare falsi positivi / negativi.
Una tipica soluzione è anche restituire un errore, che è idiomatico in Go:
package main
import "fmt"
func isAlive() (bool, error) {
//Not implemented yet
return false, fmt.Errorf("Not implemented yet")
}
func main() {
_, err := isAlive()
if err != nil {
fmt.Printf("ERR: %s\n", err.Error())
}
}
Quando si restituisce sia una struttura che un errore, è necessaria una struttura utente per il reso, che non è molto elegante. Ci sono due contro-opzioni:
- Lavorare con le interfacce: restituire nil restituendo un'interfaccia.
- Lavora con i puntatori: un puntatore può essere
nil
Ad esempio, il seguente codice restituisce un puntatore:
func(d *DB) GetUser(id uint64) (*User, error) {
//Some error ocurred
return nil, err
}