Maison >développement back-end >Golang >Les méthodes Go peuvent-elles être surchargées en fonction des types d'arguments ?
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) }
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) }
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
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!