Il existe plusieurs réponses / techniques à la question ci-dessous:
- Comment définir les valeurs par défaut des structures golang?
- Comment initialiser des structures dans Golang
J'ai quelques réponses, mais une discussion plus approfondie est nécessaire.
go
struct
initialization
default-value
Prateek
la source
la source
Réponses:
Une idée possible est d'écrire une fonction constructeur distincte
la source
NewSomething
et même les champsText
etDefaultText
, mais ne pas exporter le type de structuresomething
.reflect.New()
, par exemple), il ne peut pas s'attendre à connaître votre fonction de fabrique spécialement nommée. Dans ce cas, et à moins que la langue elle-même ne soit modifiée, seule une interface (que la bibliothèque pourrait vérifier) ferait l'affaire, je pense.Forcer une méthode à obtenir la structure (la manière du constructeur).
Cela peut être fait en rendant simplement le type lui-même non exporté. Vous pouvez exporter la fonction NewSomething et même les champs Text et DefaultText, mais ne pas exporter le type de structure quelque chose
Une autre façon de le personnaliser pour votre propre module consiste à utiliser une structure de configuration pour définir les valeurs par défaut (option 5 dans le lien). Ce n'est pas un bon moyen cependant.
la source
Un problème avec l'option 1 dans la réponse de Victor Zamanian est que si le type n'est pas exporté, les utilisateurs de votre package ne peuvent pas le déclarer comme type pour les paramètres de fonction, etc. Une solution serait d'exporter une interface au lieu de struct eg
Ce qui nous permet de déclarer les types de paramètres de fonction à l'aide de l'interface Candidate exportée. Le seul inconvénient que je peux voir avec cette solution est que toutes nos méthodes doivent être déclarées dans la définition de l'interface, mais vous pouvez dire que c'est de toute façon une bonne pratique.
la source
Votes unit32
devrait probablement êtreVotes uint32
Il existe un moyen de faire cela avec des balises, qui permet plusieurs valeurs par défaut.
Supposons que vous ayez la structure suivante, avec 2 balises par défaut default0 et default1 .
Il est maintenant possible de définir les valeurs par défaut.
Voici le programme complet dans une aire de jeux .
Si vous êtes intéressé par un exemple plus complexe, par exemple avec des tranches et des cartes, jetez un œil à creasty / defaultse
la source
Depuis https://golang.org/doc/effective_go.html#composite_literals :
Parfois, la valeur zéro n'est pas assez bonne et un constructeur d'initialisation est nécessaire, comme dans cet exemple dérivé du package os.
la source
la source