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

Comment réécrire une fonction en Golang ?

王林
Libérer: 2024-04-27 11:15:02
original
516 Les gens l'ont consulté

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() {}
Copier après la connexion

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

注意:

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

实战案例

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

type Animal struct {
    name string
}

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

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

type Dog struct {
    Animal
}

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

在这里,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!
}
Copier après la connexion
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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal