Maison > développement back-end > Golang > Go Generics peut-il gérer les paramètres de type dans les définitions de méthodes d'interface ?

Go Generics peut-il gérer les paramètres de type dans les définitions de méthodes d'interface ?

Barbara Streisand
Libérer: 2024-12-06 10:19:14
original
928 Les gens l'ont consulté

Can Go Generics Handle Type Parameters in Interface Method Definitions?

Paramètres de type dans les méthodes d'interface : un dilemme des génériques Go

Dans la quête des génériques par Go, une pierre d'achoppement particulière émerge : l'interdiction du type paramètres dans les définitions de méthodes d’interface. Cette restriction, rencontrée par un développeur tentant d'extraire un magasin de clés/valeurs, nous laisse nous demander pourquoi et si une solution existe.

Raison d'être derrière la restriction

The Go L'équipe principale a pris la décision délibérée de concevoir d'interdire les paramètres de type dans les interfaces pour plusieurs raisons :

  1. Interprétation Ambiguïté : Les paramètres de type dans les interfaces pourraient conduire à de multiples interprétations des méthodes, ce qui rend difficile l'établissement de règles de mise en œuvre cohérentes.
  2. Performances au moment de la compilation : Traversée de l'ensemble de la hiérarchie du système de types à le temps de compilation pour résoudre les paramètres de type pourrait avoir un impact significatif sur les performances.
  3. Réflexion d'exécution : Autoriser les paramètres de type dans les interfaces nécessiterait réflexion à l'exécution pour déterminer les paramètres de type réels, ralentissant l'exécution.
  4. Conflits d'implémentation : Les méthodes paramétrées sont essentiellement des fonctions indépendantes, qui pourraient entrer en conflit avec la notion d'implémentation d'interfaces.

Contourner la restriction

Bien que la restriction puisse être frustrant, ce n'est pas insurmontable. La solution proposée dans la proposition Paramètres de type consiste à déplacer le paramètre de type dans la définition du type d'interface elle-même :

type Reader[V Unmarshaler] interface {
    Read(bucket []byte, k ...[]byte) ([][]byte, error)
    ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error)
}

type Unmarshaler interface {
    UnmarshalKV(v []byte) error
}
Copier après la connexion

Cette approche permet des interfaces génériques de type sécurisé tout en préservant les contraintes de conception du langage.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal