Un problème avec l'option 1 de la réponse de Victor Zamanian est que si le type n'est pas exporté, les utilisateurs de votre paquetage ne peuvent pas le déclarer comme type pour les paramètres de fonction, etc. Une façon de contourner ce problème serait d'exporter une interface à la place de la structure, par ex.
package candidate
// Exporting interface instead of struct
type Candidate interface {}
// Struct is not exported
type candidate struct {
Name string
Votes uint32 // Defaults to 0
}
// We are forced to call the constructor to get an instance of candidate
func New(name string) Candidate {
return candidate{name, 0} // enforce the default value here
}
Ce qui nous permet de déclarer les types de paramètres de fonction en utilisant l'interface Candidate exportée. Le seul inconvénient que je vois à cette solution est que toutes nos méthodes doivent être déclarées dans la définition de l'interface, mais on pourrait faire valoir que c'est de toute façon une bonne pratique.
2 votes
En rapport : Comment s'assurer qu'une méthode est utilisée après la création d'un objet dans golang ?
1 votes
@icza Votre réponse fournit un moyen de le faire, mais si l'on se fie au titre de la question, elle n'est en aucun cas similaire ou consultable, car il s'agit d'une question très spécifique. Je vais cependant ajouter le lien dans ma réponse.
0 votes
Il y a deux questions ici, choisissez-en une. En supposant que vous optiez pour la première question (conformément au titre de la question), veuillez être plus précis quant à vos recherches antérieures et aux points sur lesquels vos autres réponses nécessitent une discussion plus approfondie.