Maison >développement back-end >Golang >Comment puis-je contraindre les types génériques dans Go pour garantir la présence de champs spécifiques ?

Comment puis-je contraindre les types génériques dans Go pour garantir la présence de champs spécifiques ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-06 06:41:12483parcourir

How Can I Constrain Generic Types in Go to Ensure the Presence of Specific Fields?

Contraintes de type génériques pour la présence de champs

Question

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.

Réponse

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.

Contraintes d'interface

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
}

Propriétés accessibles

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)
}

Limitations

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.

Conclusion

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!

Déclaration:
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