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 ?
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
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.
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
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!