Maison >développement back-end >Golang >Comment remplacer les méthodes Struct intégrées dans Go ?

Comment remplacer les méthodes Struct intégrées dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 16:10:02903parcourir

How to Override Embedded Struct Methods in Go?

Remplacement de la méthode de la structure intégrée dans Go

Dans Go, lorsqu'une structure hérite d'une autre structure (appelée intégration), elle hérite de tous les champs et méthodes de la structure intégrée structurer. Cependant, si la structure héritante définit sa propre méthode avec le même nom que celle de la structure intégrée, la méthode intégrée est masquée, ou plutôt masquée.

Remplacer la méthode intégrée

Remplacer une méthode intégrée La méthode dans la structure intégrée implique d'accéder explicitement à la méthode de la structure intégrée en utilisant la syntaxe :

<code class="go">yourStruct.EmbeddedStruct.method()</code>

Par exemple :

<code class="go">type Base struct {
    val int
}
func (b *Base)Set(i int) {
    b.val = i
}

type Sub struct {
    Base
    changed bool
}</code>

Ici, Sub intègre Base. Cependant, la méthode Set de Sub remplace la méthode Set de Base. Pour appeler la méthode Set originale de Base depuis Sub, il faudrait appeler explicitement b.Base.Set(i).

Exemple : remplacement et appel d'une méthode intégrée

Considérez le code suivant :

<code class="go">func t16() {
    s := &Sub{}
    s.Set(1)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>

Initialement, la méthode Set de Sub est invoquée, ce qui remplace la méthode Set de Base. Pour démontrer le comportement original de la méthode Set de Base, on peut appeler s.Base.Set(10):

<code class="go">func t16() {
    s := &Sub{}
    s.Base.Set(10)
    var b *Base = &s.Base
    fmt.Printf("%+v\n", b)
    fmt.Printf("%+v\n", s)
}</code>

Cela garantit que la méthode Set d'origine de Base est invoquée, en contournant la méthode Set personnalisée de Sub et sa modification ultérieure. de changé.

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!

Déclaration:
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