Maison > développement back-end > Golang > Les méthodes Go peuvent-elles être surchargées en fonction des types d'arguments ?

Les méthodes Go peuvent-elles être surchargées en fonction des types d'arguments ?

Susan Sarandon
Libérer: 2024-12-22 16:08:13
original
824 Les gens l'ont consulté

Can Go Methods Be Overloaded Based on Argument Types?

Surcharge de méthodes en Golang avec différents types

En Go, il est possible de définir des méthodes avec le même nom mais des types différents pour leurs récepteurs , permettant un comportement polymorphe. Cependant, ce n'est pas le cas pour les arguments.

Lors de l'utilisation de méthodes basées sur le récepteur, comme le montre l'extrait de code ci-dessous :

type A struct {
  Name string
}

type B struct {
  Name string
}

func (a *A) Print() {
  fmt.Println(a.Name)
}

func (b *B) Print() {
  fmt.Println(b.Name)
}
Copier après la connexion

Ceci se compile avec succès et fournit le résultat souhaité lors de l'appel la méthode Print sur les instances de A et B. Cependant, lorsque vous tentez de déplacer le récepteur de la méthode vers les arguments, comme indiqué :

func Print(a *A) {
  fmt.Println(a.Name)
}

func Print(b *B) {
  fmt.Println(b.Name)
}
Copier après la connexion

Cela entraîne une compilation error :

./test.go:22: Print redeclared in this block
    previous declaration at ./test.go:18
./test.go:40: cannot use a (type *A) as type *B in function argument
Copier après la connexion

Cela est dû au fait que Go ne prend pas en charge la surcharge de fonctions basée sur les types d'arguments. Cela signifie que les fonctions portant le même nom ne peuvent pas être définies avec des types d'arguments différents. Au lieu de cela, cela nécessite que les fonctions aient des noms uniques ou utilisent des méthodes si vous souhaitez "surcharger" sur un seul paramètre, le récepteur.

Par conséquent, il est permis de surcharger les méthodes basées sur le récepteur mais pas sur le types d'arguments.

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