Les développeurs rencontrent souvent le besoin de définir une fonction générique dans Go qui accepte des valeurs ayant certains champs. Un exemple courant est la nécessité d'accéder à un champ nommé ID avec un type entier. Malgré les tentatives, les contraintes génériques semblent s'avérer insaisissables.
Malheureusement, sans définir le champ dans une interface, appliquer de telles contraintes dans Go n'est pas réalisable. Contrairement à certaines propositions, l'implémentation actuelle ne prend pas en charge les types structurels dans les génériques.
L'application de la présence sur le terrain nécessite la définition du champ dans une interface. Cette interface servira de contrainte de type, garantissant que tout type passé à la fonction générique possède le champ requis :
type IDer interface { ID int }
Pour accéder au champ contraint au sein de la fonction générique, le type passé doit satisfaire la contrainte d'interface. Cette approche fournit un mécanisme pour garantir la présence et l'accessibilité du champ souhaité :
func Print[T IDer](s T) { fmt.Print(s.ID) }
Il est important de noter que cette approche ne prend pas en charge l'accès aux champs avec une structure partielle genres. Cependant, les versions futures pourraient remédier à cette limitation.
Imposer la présence de certains champs dans les fonctions génériques nécessite la définition des méthodes correspondantes dans une interface. Cette contrainte garantit que les types passés à la fonction possèdent les champs nécessaires à la manipulation.
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!