Valeurs par défaut et distinguant les 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, la distinction entre une valeur 0 et un champ non initialisé peut être difficile. Importer "journal" Type Test Struct { Testintone int Testinttwo int } func main () { S: = TEST {Testintone: 0} Log.println (s) }
Dans ce code, TestintOne et TesIntTtwo sont nuls. Cependant, Testintone a été explicitement défini sur 0, tandis que TesIntTwo a été initialisé par la valeur par défaut. Cette ambiguïté peut conduire à la confusion pour déterminer quels champs ont été explicitement définis.
package main import "log" type test struct { testIntOne int testIntTwo int } func main() { s := test{testIntOne: 0} log.Println(s) }Est-il possible de distinguer ces deux cas?
Non, Go ne suit pas si un champ a été réglé 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. nil.
type test struct { Testintone * int Testinttwo * int }
Créer une méthode de setter: Vous pouvez créer une méthode pour définir la valeur d'un champ et suivre si elle a été définie. Testintone int Testinttwo bool // suit si TesIntTtwo a été défini } func (t * test) settestTinTwo (val int) { T.Testinttwo = Val t.issettesTInttwo = true } func main () { S: = TEST {} S.SetTesTinTtwo (0) fmt.println (s.issettesTInttwo) // }
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3