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

Comment remplacer les méthodes de structure intégrées dans Go sans affecter la structure de base ?

Barbara Streisand
Libérer: 2024-10-26 03:01:03
original
268 Les gens l'ont consulté

How to Override Embedded Struct Methods in Go Without Affecting the Base Struct?

Remplacement des méthodes de structure intégrées dans Go

Dans Go, les structures intégrées héritent des champs et des méthodes de leurs structures de base. Cependant, un conflit peut survenir lorsque les structures de base et intégrées implémentent une méthode portant le même nom. Cet article explore une solution pour remplacer la méthode de la structure intégrée sans affecter la structure de base.

Considérez le code suivant :

<code class="go">package main

import "fmt"

type Base struct {
    val int
}

func (b *Base) Set(i int) {
    b.val = i
}

type Sub struct {
    Base
    changed bool
}

func (b *Sub) Set(i int) {
    b.val = i
    b.changed = true
}

func main() {
    s := &Sub{}
    s.Base.Set(1)
    var b *Base = &s.Base

    // Both print the same value
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
Copier après la connexion

Ici, le type Sub intègre le type Base. Sub et Base ont tous deux une méthode nommée Set, et lorsque vous appelez s.Base.Set(), vous contournez la méthode Sub.Set() et appelez directement la méthode Base.Set().

Pour remplacez la méthode de la structure intégrée, vous pouvez appeler la méthode Sub.Set() à la place. Dans Go, lorsqu'un type implémente une méthode portant le même nom que son type incorporé, la méthode incorporée est masquée.

Voici une version mise à jour du code :

<code class="go">func (b *Sub) Set(i int) {
    b.Base.Set(i) // Call the Base.Set() method
    b.changed = true
}

func main() {
    s := &Sub{}
    s.Set(1)
    var b *Base = &s.Base

    // Note: b.val is now 1
    // s.changed is now true
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>
Copier après la connexion

Dans cet exemple , lorsque vous appelez s.Set(1), la méthode Sub.Set() sera invoquée, qui à son tour appelle la méthode Base.Set(). Cela met à jour le champ val de la structure de base intégrée dans Sub. Le champ modifié sera également défini sur true pour indiquer que la valeur a été modifiée.

Cette solution vous permet de remplacer la méthode de la structure intégrée sans affecter la structure de base. Il s'agit d'une technique courante utilisée dans Go pour obtenir la réutilisabilité et la flexibilité du code.

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!