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

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

Patricia Arquette
Libérer: 2024-10-27 08:55:30
original
797 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

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!