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

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

Linda Hamilton
Libérer: 2024-12-06 09:52:11
original
414 Les gens l'ont consulté

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

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
}
Copier après la connexion

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