Maison  >  Article  >  développement back-end  >  Comment remplacer les méthodes de structure intégrées dans Go sans affecter la structure de base ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 03:01:03269parcourir

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>

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>

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!

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