Maison >développement back-end >Golang >Pourquoi les méthodes d'interface de Go ne peuvent-elles pas avoir de paramètres de type ?

Pourquoi les méthodes d'interface de Go ne peuvent-elles pas avoir de paramètres de type ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-30 16:21:11704parcourir

Why Can't Go's Interface Methods Have Type Parameters?

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 :

  • Préserver l'identité des arguments de méthode
  • Traverser les arbres d'exécution de méthode au moment de la compilation, ce qui pourrait avoir un impact sur les performances
  • Exiger réflexion à l'exécution, compromettant davantage les performances
  • Créer de la confusion en permettant la mise en œuvre de méthodes paramétrées interfaces

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!

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