Maison  >  Article  >  développement back-end  >  Comment réécrire une fonction en Golang ?

Comment réécrire une fonction en Golang ?

王林
王林original
2024-04-27 11:15:02461parcourir

Dans Go, la substitution de méthode permet de redéfinir les méthodes d'une classe de base dans une classe dérivée tout en gardant la même signature de méthode : utilisez le mot-clé override. La méthode remplacée doit avoir la même signature que la méthode de base. Le type de récepteur de la méthode remplacée doit être un sous-type du type de base.

如何在 golang 中重写函数?

Surcharge de fonctions dans Go

La substitution nous permet de définir de nouvelles implémentations de méthodes existantes dans des classes dérivées tout en préservant la signature de la méthode. Cela nous permet d'étendre les fonctionnalités de la classe de base sans changer son interface.

Syntaxe

Le remplacement dans Go utilise le mot-clé override : override 关键字:

type MyStruct struct {
    baseStruct
}

func (m MyStruct) SomeMethod() {}

SomeMethod 方法将重写来自 baseStruct 的同名方法。

注意:

  • 重写的方法必须具有与被重写的基方法相同的签名。
  • 重写方法的接收者类型必须是基类型的子类型。
  • Go 中没有虚拟方法或动态绑定。

实战案例

假设我们有一个 Animal 基类,具有 Speak 方法:

type Animal struct {
    name string
}

func (a Animal) Speak() {
    fmt.Printf("%s speaks!\n", a.name)
}

我们可以创建一个 Dog 派生类,该类扩展 Speak 方法以吠叫:

type Dog struct {
    Animal
}

func (d Dog) Speak() {
    fmt.Printf("%s barks!\n", d.name)
}

在这里,Dog.Speak 方法重写了 Animal.Speak

package main

import "fmt"

type Animal struct {
    name string
}

func (a Animal) Speak() {
    fmt.Printf("%s speaks!\n", a.name)
}

type Dog struct {
    Animal
}

func (d Dog) Speak() {
    fmt.Printf("%s barks!\n", d.name)
}

func main() {
    a := Animal{name: "Animal"}
    a.Speak() // Output: Animal speaks!

    d := Dog{Animal{name: "Dog"}}
    d.Speak() // Output: Dog barks!
}

La méthode SomeMethod remplacera le même nom de la méthode baseStruct .

Remarque :

🎜
  • La méthode remplacée doit avoir la même signature que la méthode de base remplacée.
  • Le type de récepteur de la méthode remplacée doit être un sous-type du type de base.
  • Il n'y a pas de méthodes virtuelles ni de liaisons dynamiques dans Go.
🎜🎜Cas pratique🎜🎜🎜Supposons que nous ayons une classe de base Animal avec une méthode Speak : 🎜rrreee🎜Nous pouvons créer un Dog qui étend la méthode Speak pour aboyer : 🎜rrreee🎜Ici, la méthode Dog.Speak remplace Animal Speak méthode, fournissant une implémentation spécifique au chien. 🎜🎜🎜Exemple🎜🎜rrreee

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