Maison >développement back-end >Golang >Comment remplacer les méthodes de structure intégrées dans Go sans affecter la structure de base ?
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!