Maison >développement back-end >Golang >Comment puis-je résoudre l'erreur « Impossible de déduire V » de Go lors de l'implémentation d'interfaces génériques ?

Comment puis-je résoudre l'erreur « Impossible de déduire V » de Go lors de l'implémentation d'interfaces génériques ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 06:24:13532parcourir

How Can I Resolve Go's

Déduction des paramètres de type pour les implémentations d'interfaces génériques : énigme « impossible de déduire V »

Problème

Lors de la tentative d'enregistrement et de chargement de résultats de différents types à l'aide une interface générique et son implémentation, Go rencontre un problème inférant le V type:

cannot infer V: infer type parameter from constraint implementation

Explication

Dans Go 1.20 et versions antérieures, déduire le type V à partir de l'implémentation de la contrainte générique ConfigStorage[K, V] n'est pas simple. L'algorithme d'inférence de type est limité dans sa capacité à déduire des arguments de type à partir de types concrets implémentant des contraintes.

Solution

Go 1.21 et supérieur :

Depuis Passez à la version 1.21, ce problème est résolu. L'inférence de type prend désormais en compte les types utilisés dans les méthodes d'interface. Par conséquent, vous pouvez simplement appeler GetValue sans spécifier de contraintes de type :

result, _ = GetValue(fileStorage, "key")

Go 1.20 et versions antérieures :

Dans les anciennes versions de Go, vous devez spécifier explicitement le type paramètres pour GetValue :

GetValue[string, string](fileStorage, "key") // First string for K, second for V

Informations supplémentaires

Les notes de version Go mettent en évidence ce type l'inférence prend désormais en compte les méthodes lors de l'attribution de valeurs à une interface. Cela permet de déduire les arguments de type pour les paramètres de type dans les signatures de méthode à partir des types de paramètres correspondants des méthodes.

Avant Go 1.21, les propositions suggéraient d'utiliser l'inférence de type d'argument de fonction pour déduire des arguments de type à partir d'arguments non-type. Cependant, l'inférence de type de contrainte n'était pas initialement prise en charge pour déduire des arguments de type inconnu à partir d'arguments de type connu. Cette limitation a conduit à l'erreur « Impossible de déduire V » lors de la déduction de V à partir du type implémentant la contrainte.

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