Maison >développement back-end >Golang >Comment puis-je faire la différence entre les valeurs par défaut et les valeurs zéro définies explicitement dans les structures Go ?
Valeurs par défaut et distinction des champs non initialisés dans Go
Dans Go, les types primitifs ont des valeurs par défaut. Par exemple, les entiers (int) sont initialisés à 0. Cependant, lorsque vous travaillez avec des structures, faire la distinction entre une valeur 0 et un champ non initialisé peut être difficile.
Par exemple, considérez le code ci-dessous :
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }
Dans ce code, testIntOne et testIntTwo valent zéro. Cependant, testIntOne a été explicitement défini sur 0, tandis que testIntTwo a été initialisé par la valeur par défaut. Cette ambiguïté peut prêter à confusion dans la détermination des champs qui ont été explicitement définis.
Est-il possible de faire la distinction entre ces deux cas ?
Non, Go ne suit pas si un champ a été défini ou non. Par conséquent, il est impossible de savoir si une valeur nulle est le résultat d'une initialisation ou d'une affectation intentionnelle.
Solutions de contournement
type test struct { testIntOne *int testIntTwo *int }
type test struct { testIntOne int testIntTwo bool // Tracks if testIntTwo has been set } func (t *test) SetTestIntTwo(val int) { t.testIntTwo = val t.isSetTestIntTwo = true } func main() { s := test{} s.SetTestIntTwo(0) fmt.Println(s.isSetTestIntTwo) // Output: true }
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!