Valeurs de structure par défaut
Dans Go, les valeurs par défaut sont attribuées aux champs d'une structure qui ne sont pas initialisés lors de la déclaration de la structure. Pour les types primitifs comme int, cette valeur par défaut est 0. Cependant, déterminer si cette valeur a été explicitement définie ou s'il s'agit de la valeur par défaut peut être problématique.
Y a-t-il une différence ?
Malheureusement, Go ne permet pas de savoir si un champ a été défini ou non. Par conséquent, il n'y a aucun moyen de faire la distinction entre un champ qui a été initialisé à 0 et un champ qui n'a pas été défini du tout.
Solutions de contournement
1. Utilisation de pointeurs :
En utilisant des pointeurs, vous pouvez profiter de leur valeur nulle. Si un pointeur est nul, cela indique qu'il n'a pas été défini.
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} fmt.Println("testIntOne set:", s.testIntOne != nil) fmt.Println("testIntTwo set:", s.testIntTwo != nil) }
2. Utilisation de méthodes :
Vous pouvez également définir une méthode pour définir un champ et savoir s'il a été défini.
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func (t *test) SetTwo(i int) { t.testIntTwo, t.twoSet = i, true } func main() { s := test{} s.SetOne(0) fmt.Println("testIntOne set:", s.oneSet) fmt.Println("testIntTwo set:", s.twoSet) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!