Il n'y a pas de surcharge de fonctions dans le langage Go, mais elle peut être simulée via deux technologies : 1. Collection de méthodes : définir une interface qui contient des méthodes avec le même nom mais des listes de paramètres différentes. Différents types de structures peuvent ainsi implémenter l'interface. créer des méthodes surchargées ;2. Réflexion : utilisez la réflexion pour appeler dynamiquement différentes méthodes avec le même nom et appeler des méthodes avec des noms de méthode spécifiques via des objets de réflexion.
L'essence de la surcharge de fonctions Go
Il n'y a pas de surcharge de fonctions au sens traditionnel du langage Go, mais le comportement de la surcharge de fonctions peut être simulé grâce à des technologies spécifiques.
Ensembles de méthodes : ensembles de méthodes
La surcharge de fonctions dans Go peut être implémentée via des ensembles de méthodes. Lorsqu'une interface définit un ensemble de méthodes portant le même nom mais des listes de paramètres différentes, un ensemble de méthodes surchargées peut être créé.
type Shape interface { Area() float64 } type Square struct { side float64 } func (s Square) Area() float64 { return s.side * s.side } type Circle struct { radius float64 } func (c Circle) Area() float64 { return math.Pi * c.radius * c.radius }
Reflection : Reflection
peut appeler dynamiquement différentes méthodes portant le même nom par réflexion.
package main import ( "fmt" "reflect" ) type Shape interface { Area() float64 } type Square struct { side float64 } func (s Square) Area() float64 { return s.side * s.side } type Circle struct { radius float64 } func (c Circle) Area() float64 { return math.Pi * c.radius * c.radius } func main() { shapes := []Shape{ Square{side: 5.0}, Circle{radius: 3.0}, } for _, shape := range shapes { areaValue := reflect.ValueOf(shape).MethodByName("Area").Call([]reflect.Value{})[0] fmt.Println("Area:", areaValue.Float()) } }
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!