Maison >développement back-end >Golang >Comment puis-je déterminer si un champ Go Struct a été explicitement défini ?

Comment puis-je déterminer si un champ Go Struct a été explicitement défini ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-07 21:24:15572parcourir

How Can I Determine if a Go Struct Field Has Been Explicitly Set?

Valeurs par défaut des structures Go

Dans Go, les structures (structs) ont des valeurs par défaut pour leurs champs. Par exemple, les nombres entiers (int) sont par défaut 0. Bien que cela soit utile dans de nombreux scénarios, cela peut poser un défi lorsque vous avez un scénario dans lequel 0 est une valeur valide. Cela rend difficile de savoir si un champ dans une structure a été explicitement défini ou non.

Distinction entre les valeurs par défaut et les valeurs définies

Malheureusement, Go ne fournit pas de moyen de déterminer directement si un champ a été défini ou initialisé à sa valeur par défaut. Cependant, vous pouvez utiliser deux approches :

Utilisation de pointeurs

Vous pouvez utiliser des pointeurs pour les champs qui peuvent ne pas être définis. Les pointeurs ont une valeur nulle nulle, que vous pouvez utiliser pour vérifier si un champ a été défini :

type Test struct {
    TestIntOne *int
    TestIntTwo *int
}

Dans ce cas, TestIntOne et TestIntTwo sont des pointeurs vers des entiers. Si TestIntOne est nul, cela signifie qu'il n'a pas été défini, tandis que s'il n'est pas nul, il a été défini sur une valeur non nulle.

Utilisation d'une méthode

Vous pouvez également créer une méthode qui définit le champ et suit s'il a été défini ou non :

type Test struct {
    TestIntOne int
    TestIntTwo int

    isSetOne, isSetTwo bool
}

func (t *Test) SetIntOne(i int) {
    t.TestIntOne = i
    t.isSetOne = true
}

Avec ceci méthode, vous pouvez contrôler le paramètre de TestIntOne, et la propriété isSetOne indiquera si elle a été définie ou non.

Conclusion

Alors que les structures Go ont des valeurs par défaut pour leurs champs, il n'existe aucun moyen direct de déterminer si un champ a été défini manuellement ou initialisé à sa valeur par défaut. Cependant, en utilisant des pointeurs ou des méthodes, vous pouvez contourner cette limitation et conserver l'état des champs de votre structure.

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