"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment éviter la duplication de code lors de l'implémentation de méthodes identiques sur des structures avec des champs partagés ?

Comment éviter la duplication de code lors de l'implémentation de méthodes identiques sur des structures avec des champs partagés ?

Publié le 2024-11-19
Parcourir:590

How to Avoid Code Duplication When Implementing Identical Methods on Structs with Shared Fields?

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.

Dernier tutoriel Plus>

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