Go Bonne pratique : gestion des fonctions pour des structures similaires avec des champs partagés
Dans Go, il est courant de rencontrer plusieurs structures avec des champs similaires, et il est nécessaire d'effectuer des opérations identiques sur eux. Pour éviter la répétition du code tout en conservant la flexibilité, envisagez les stratégies suivantes :
Création d'un type personnalisé pour le champ partagé :
Si le champ partagé est un type de données simple ( par exemple, une chaîne), envisagez de définir un type personnalisé pour celui-ci. Cela vous permet d'attacher des méthodes au type personnalisé, qui peuvent ensuite être utilisées par n'importe quelle structure intégrant ce type.
type Version string
func (v Version) PrintVersion() {
fmt.Println("Version is", v)
}
Ensuite, intégrez le type Version dans les structures :
type Game struct {
Name string
MultiplayerSupport bool
Genre string
Version
}
type ERP struct {
Name string
MRPSupport bool
SupportedDatabases []string
Version
}
Cela permet d'imprimer la version en utilisant la méthode PrintVersion sur le champ Version :
g.PrintVersion()
e.PrintVersion()
Utilisation de la réflexion :
Si le champ partagé peut être de différents types ou si vous souhaitez plus de flexibilité, vous pouvez utiliser la réflexion pour invoquer dynamiquement le champ approprié méthode. Cette approche est plus complexe et a certaines implications en termes de performances, mais elle offre une plus grande flexibilité.
type Printer interface {
PrintVersion() error
}
func PrintVersion(p Printer) error {
t := reflect.TypeOf(p)
method, ok := t.MethodByName("PrintVersion")
if !ok {
return fmt.Errorf("object doesn't have a PrintVersion method")
}
return method.Func.Call([]reflect.Value{reflect.ValueOf(p)})[0].Interface().(error)
}
Vous pouvez ensuite utiliser la fonction PrintVersion pour appeler la méthode PrintVersion sur n'importe quel objet qui implémente l'interface Printer :
var game Game
var erp ERP
PrintVersion(game)
PrintVersion(erp)
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