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 ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 16:03:12227parcourir

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

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!

Déclaration:
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