"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je faire la différence entre la valeur par défaut et définir explicitement les valeurs zéro dans GO STRUCTS?

Comment puis-je faire la différence entre la valeur par défaut et définir explicitement les valeurs zéro dans GO STRUCTS?

Publié le 2025-03-12
Parcourir:449

How Can I Differentiate Between Default and Explicitly Set Zero Values in Go Structs?

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) // }

Dernier tutoriel Plus>

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