Maison > développement back-end > Golang > Comment puis-je faire la distinction entre les valeurs par défaut et les valeurs zéro définies explicitement dans les structures Go ?

Comment puis-je faire la distinction entre les valeurs par défaut et les valeurs zéro définies explicitement dans les structures Go ?

DDD
Libérer: 2024-12-04 09:36:11
original
616 Les gens l'ont consulté

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

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal