Dans Go, une exigence courante est d'avoir une fonction qui opère sur des données de différents types. Prenons, par exemple, une fonction qui compte le nombre d'éléments dans une tranche d'un type particulier. Comment concevoir cette fonction pour gérer n'importe quel type de données, pas seulement le type spécifique pour lequel elle a été initialement conçue ?
Une approche consiste à utiliser des interfaces, qui sont essentiellement des contrats définissant un ensemble de méthodes qu'un type doit implémenter pour se conformer à l’interface. En utilisant des interfaces comme paramètres de méthode, nous pouvons écrire des fonctions génériques qui peuvent fonctionner avec n'importe quel type implémentant l'interface requise.
Considérez l'exemple suivant, dans lequel nous visons à créer une fonction Count générique qui compte le nombre d'éléments. dans une tranche :
func Count[T any](s []T) int {
return len(s)
}
En utilisant des génériques comme celui-ci, nous pouvons transmettre des tranches de n'importe quel type à Count, lui permettant de compter les éléments de manière dynamique en fonction du type d'entrée.
De plus, nous pouvons utiliser des interfaces pour implémenter des méthodes génériques pour des tâches spécifiques. Par exemple, nous pouvons définir une interface identifiable avec une méthode GetID et créer une fonction FindByID générique qui recherche un élément dans une tranche en fonction de sa valeur ID, quel que soit le type réel des éléments de la tranche :
type Identifiable interface {
GetID() int
}
func FindByID[T Identifiable](s []T, id int) *T {
for i, v := range s {
if v.GetID() == id {
return &s[i]
}
}
return nil
}
En incorporant des interfaces et des génériques, nous obtenons le pouvoir de créer des fonctions très flexibles et capables de fonctionner efficacement sur des données de différents types.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3