Maison > développement back-end > Golang > le corps du texte

Comment les récepteurs de méthodes dans Go peuvent-ils éliminer la redondance des fonctions pour des structures similaires ?

Mary-Kate Olsen
Libérer: 2024-10-26 14:31:02
original
940 Les gens l'ont consulté

How Can Method Receivers in Go Eliminate Function Redundancy for Similar Structs?

Utilisation des récepteurs de méthode de Go pour éviter la redondance des fonctions

Dans Go, il est courant de rencontrer des situations où plusieurs structures partagent des noms de champs et des opérations similaires. Pour éviter la répétition du code lors de la définition des fonctions de ces structures, envisagez d'exploiter les récepteurs de méthodes.

Imaginez que vous ayez deux structures, Game et ERP, avec des champs qui incluent un nom et une version. Vous souhaitez créer une fonction pour imprimer la variable Version pour chaque structure.

Traditionnellement, vous devrez définir des fonctions distinctes pour le jeu et l'ERP :

<code class="go">type Game struct {
    Name string
    MultiplayerSupport bool
    Genre string
    Version string
}

type ERP struct {
    Name string
    MRPSupport bool
    SupportedDatabases []string
    Version string
}

func (g *Game) PrintVersion() {
    fmt.Println("Game Version:", g.Version)
}

func (e *ERP) PrintVersion() {
    fmt.Println("ERP Version:", e.Version)
}</code>
Copier après la connexion

Cependant, cette approche introduit du code reproduction. Pour surmonter ce problème, Go fournit des récepteurs de méthodes. Voici comment vous pouvez l'implémenter :

<code class="go">type Version string

func (v Version) PrintVersion() {
    fmt.Println("Version:", v)
}

type Game struct {
    Name               string
    MultiplayerSupport bool
    Genre              string
    Version
}

type ERP struct {
    Name               string
    MRPSupport         bool
    SupportedDatabases []string
    Version
}</code>
Copier après la connexion

En définissant un type Version et en implémentant la méthode PrintVersion pour celui-ci, vous pouvez réutiliser cette méthode dans vos structures via la composition :

<code class="go">func main() {
    g := Game{
        "Fear Effect",
        false,
        "Action-Adventure",
        "1.0.0",
    }

    g.Version.PrintVersion()

    e := ERP{
        "Logo",
        true,
        []string{"ms-sql"},
        "2.0.0",
    }

    e.Version.PrintVersion()
}</code>
Copier après la connexion

Ceci Cette approche évite non seulement la redondance des fonctions, mais vous permet également de maintenir une interface cohérente pour accéder au champ Version sur plusieurs structures.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!