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

Comment pouvez-vous remplacer les méthodes Struct intégrées dans Golang ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 08:55:30920parcourir

How Can You Override Embedded Struct Methods in Golang?

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

Dans Golang, lorsqu'une structure intègre une autre structure (appelée intégration), les champs de la structure intégrée et les méthodes deviennent directement accessibles à la structure d'intégration. Cependant, si la structure d'intégration redéfinit une méthode à partir de la structure intégrée, elle peut remplacer la méthode d'origine.

Considérez le code suivant :

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

Nous avons intégré Base dans Sub. Maintenant, si nous essayons d'accéder à la méthode Set de Base depuis Sub, elle sera masquée par la propre méthode Set de Sub :

<code class="go">func t16() {
    s := &Sub{}
    // This calls Base's Set method
    s.Base.Set(1) 
    // This causes an error, as s.Set hides Base's Set
    s.Set(10) 
}</code>

Pour remplacer ce comportement, nous pouvons redéfinir la méthode Set de Sub pour appeler explicitement la méthode Set de Base :

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

Maintenant, lorsque nous appellerons s.Set(), il invoquera la méthode Set de Base tout en nous permettant de suivre les modifications dans Sub.

<code class="go">func t16() {
    s := &Sub{}
    // Calls Sub's overridden Set method
    s.Set(10) 
    fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true}
}</code>

Cette méthode vous permet de remplacez les méthodes de la structure intégrée tout en conservant l'accès à la méthode d'origine via le champ de structure intégrée.

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