Go
Valeurs nulles
Recherche…
Explication
Des valeurs nulles ou une initialisation nulle sont simples à mettre en œuvre. Venant de langages comme Java, il peut sembler compliqué que certaines valeurs puissent être nil
alors que d'autres ne le sont pas. En résumé de la valeur zéro: la spécification du langage de programmation Go :
Les pointeurs, les fonctions, les interfaces, les tranches, les canaux et les cartes sont les seuls types pouvant être nuls. Les autres sont initialisés avec des chaînes fausses, nulles ou vides en fonction de leurs types respectifs.
Si une fonction vérifie certaines conditions, des problèmes peuvent survenir:
func isAlive() bool {
//Not implemented yet
return false
}
La valeur zéro sera fausse avant l'implémentation. Les tests unitaires dépendant du retour de cette fonction peuvent donner des faux positifs / négatifs.
Une solution typique consiste à renvoyer une erreur idiomatique dans 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())
}
}
Lorsque vous retournez à la fois une structure et une erreur, vous avez besoin d'une structure utilisateur pour le retour, ce qui n'est pas très élégant. Il y a deux contre-options:
- Travailler avec des interfaces: renvoyer nil en renvoyant une interface.
- Travailler avec des pointeurs: un pointeur peut être
nil
Par exemple, le code suivant renvoie un pointeur:
func(d *DB) GetUser(id uint64) (*User, error) {
//Some error ocurred
return nil, err
}