Paramétrage de la méthode d'interface dans les génériques Go
Lors de l'exploration des génériques Go dans la version 1.18beta2, les développeurs peuvent rencontrer l'erreur « la méthode d'interface ne doit pas avoir paramètres de type" lorsque vous tentez de définir une interface avec des méthodes acceptant des paramètres de type. Cette erreur découle de la décision de conception d'interdire les paramètres de type dans les définitions de méthodes d'interface.
La raison derrière cette restriction réside dans le potentiel d'ambiguïté et d'implications en termes de performances. Les paramètres de type dans les méthodes d'interface peuvent entraîner une incertitude quant à la préservation de l'identité de l'argument, la nécessité d'un parcours exhaustif de l'arborescence au moment de la compilation ou le potentiel d'une réflexion ayant un impact sur les performances au moment de l'exécution.
De plus, les méthodes paramétrées ne peuvent pas directement implémenter des interfaces, ce qui pourrait introduire de la confusion.
Cependant, il existe une solution de contournement qui permet l'utilisation de paramètres de type au sein d'une interface : déplacez le paramètre de type vers la définition du type d'interface elle-même. Cette approche préserve la fonctionnalité souhaitée tout en respectant les limites de conception des génériques Go.
Par exemple :
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 }
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!