Maison >développement back-end >Golang >Comment faire la distinction entre les valeurs par défaut et les valeurs zéro définies explicitement dans les structures Go ?
Valeurs de structure par défaut dans Go
Dans Go, les types primitifs tels que int ont des valeurs par défaut. Pour int, cette valeur par défaut est 0. Cependant, il peut être difficile de faire la distinction entre une valeur définie manuellement de 0 et la valeur par défaut.
Considérez la structure suivante :
type test struct { testIntOne int testIntTwo int }
Si nous créons une structure avec un champ défini sur 0, nous ne pouvons pas dire si l'autre champ est défini ou a toujours sa valeur par défaut value :
package main import "log" func main() { s := test{testIntOne: 0} log.Println(s) }
Solutions
Utilisation d'un pointeur
Une solution consiste à utiliser un pointeur pour le champ. Les pointeurs ont une valeur nulle, nous pouvons donc vérifier si le champ est défini :
type test struct { testIntOne *int testIntTwo *int } func main() { s := test{testIntOne: new(int)} log.Println(s.testIntOne != nil) // Output: true log.Println(s.testIntTwo != nil) // Output: false }
Utiliser une méthode
Une autre solution consiste à créer une méthode qui définit le champ et vérifie s'il a été défini. Le champ lui-même ne doit pas être exporté pour empêcher l'accès direct :
type test struct { testIntOne int testIntTwo int oneSet, twoSet bool } func (t *test) SetOne(i int) { t.testIntOne, t.oneSet = i, true } func main() { s := test{} s.SetOne(0) log.Println(s.oneSet) // Output: true log.Println(s.twoSet) // Output: false }
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!