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
Libérer: 2024-12-03 16:03:12
original
267 Les gens l'ont consulté

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

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

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

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
}
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal