Maison >développement back-end >Golang >Pourquoi les méthodes d'interface de Go ne peuvent-elles pas avoir de paramètres de type ?
Génériques dans Go : Restrictions sur les paramètres de méthode d'interface
Dans Go 1.18beta2, lors de la définition d'une méthode d'interface avec des paramètres génériques, vous pouvez rencontrer l'erreur "la méthode d'interface ne doit avoir aucun paramètre de type." Cet article met en lumière cette restriction et explore des solutions potentielles.
Pourquoi les paramètres de type ne sont-ils pas autorisés dans les méthodes d'interface ?
La raison de cette limitation est enracinée dans la conception. considérations pour les génériques et les paramètres de type. Les interfaces définissent des contrats pour un ensemble de signatures et de comportements de méthodes, tandis que les méthodes génériques fournissent un mécanisme d'abstraction des types. Autoriser les paramètres de type dans les méthodes d'interface introduirait des complexités dans :
Surmonter la restriction
Bien que les paramètres de type ne puissent pas être utilisés directement dans les méthodes d'interface, il existe des solutions alternatives :
Déplacer le paramètre de type vers la définition de l'interface :
Au lieu de déclarer le paramètre de type dans la méthode d'interface, déplacez à la définition de l'interface elle-même. Cela permet à l'interface de se spécialiser en fonction du paramètre de type spécifique :
type Reader[V Unmarshaler] interface { Read(bucket []byte, k ...[]byte) ([][]byte, error) ReadDoc(bucket []byte, factory func() (V, error), k ...[]byte) ([]V, error) }
Conclusion
La restriction sur les paramètres de type dans les méthodes d'interface est une décision de conception délibérée pour garantir clarté, performances et implémentation cohérente des interfaces dans les génériques Go. Même si cela peut initialement poser un défi, les solutions alternatives proposées ci-dessus offrent des moyens pratiques de contourner cette limitation et d'exploiter la puissance des génériques dans votre code.
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!