Maison >développement back-end >Golang >Comment résoudre « Impossible de déduire V : déduire le paramètre de type à partir de l'implémentation de la contrainte » dans les interfaces génériques Go ?

Comment résoudre « Impossible de déduire V : déduire le paramètre de type à partir de l'implémentation de la contrainte » dans les interfaces génériques Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 01:49:08494parcourir

How to Resolve

Résolution d'erreur : "Impossible de déduire V : déduire le paramètre de type à partir de l'implémentation de la contrainte" dans les interfaces génériques Go

Dans Go, définir une interface générique avec des paramètres de type peut conduire à problèmes d’inférence lors de sa mise en œuvre et de son utilisation. Cet article traite de l'erreur « Impossible de déduire V : déduire le paramètre de type à partir de l'implémentation de la contrainte » dans de tels scénarios.

Description du problème

Considérez une interface ConfigStorage avec les paramètres de type K et V, où V étend WritableType . Une implémentation de stockage de système de fichiers de cette interface, FileSystemStorage, est définie. Cependant, lorsque vous tentez d'utiliser la fonction générique GetValue, une erreur de compilation survient en raison de l'impossibilité de déduire le type de V.

Solution

Go 1.21 et supérieur :

Le problème est résolu dans Go 1.21 et versions ultérieures car l'inférence de type a été améliorée pour prendre en compte les signatures de méthode dans les interfaces. Les arguments de type pour les paramètres de type dans les signatures de méthode peuvent être déduits de la correspondance des paramètres dans les méthodes correspondantes.

Pour utiliser GetValue sans spécifier de contraintes de type :

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

Go 1.20 et inférieur :

Pour les versions antérieures de Go, l'inférence de V à partir du type implémentant la contrainte n'est pas prise en charge. Des paramètres de type explicites doivent être fournis lors de l'appel de GetValue :

GetValue[string, string](fileStorage, "key")

Explication

L'erreur survient car la fonction GetValue tente de déduire le type de V à partir des arguments fournis : son premier argument, le stockage , et son deuxième argument, clé. Cependant, ces arguments à eux seuls ne fournissent pas suffisamment d'informations pour déterminer V car le stockage est une valeur d'interface qui peut implémenter plusieurs types.

Spécifier explicitement les paramètres de type élimine toute ambiguïté pour le compilateur. Il permet à l'algorithme d'inférence de type de déduire le type correct de V en fonction des arguments fournis.

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