Meilleures pratiques pour utiliser une fonction commune dans des structures avec des champs identiques
Dans les scénarios où deux structures possèdent des champs identiques, il est souhaitable d'empêcher duplication de code lors de la définition de méthodes qui opèrent sur ces champs.
Type personnalisé en tant que récepteur de méthode
Le recommandé L'approche consiste à introduire un type personnalisé (par exemple, Version) qui sert de récepteur de méthode. Étant donné que tous les types personnalisés peuvent être utilisés comme récepteurs de méthodes, cette technique permet la création d'une méthode unique qui peut être appliquée à plusieurs structures.
Composition
Une fois le type personnalisé type est défini, il peut être incorporé dans les structures à l’aide de la composition. Cela implique d'intégrer le type personnalisé dans les structures, créant essentiellement une structure imbriquée.
Exemple
Considérez l'extrait de code suivant :
type Version string
func (v Version) PrintVersion() {
fmt.Println("Version is", v)
}
type Game struct {
Name string
MultiplayerSupport bool
Genre string
Version
}
type ERP struct {
Name string
MRPSupport bool
SupportedDatabases []string
Version
}
Ici, le type Version sert de récepteur de méthode, et sa méthode PrintVersion est accessible à la fois par les structures Game et ERP en raison de leurs champs Version intégrés.
Utilisation
Le champ Version intégré peut être utilisé et modifié comme n'importe quel autre champ :
main() {
g := Game{
"Fear Effect",
false,
"Action-Adventure",
"1.0.0",
}
g.PrintVersion() // Version is 1.0.0
e := ERP{
"Logo",
true,
[]string{"ms-sql"},
"2.0.0",
}
e.PrintVersion() // Version is 2.0.0
}
En employant cette approche, la répétition de code associée aux méthodes en double est éliminée tout en conservant la flexibilité et la sécurité des types.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3