


Comment puis-je résoudre l'erreur « Impossible d'inférer V » de Go lors de l'utilisation de contraintes de type dans des interfaces génériques ?
Dec 13, 2024 pm 01:45 PMImpossible de déduire V : résolution du paramètre de type d'inférence à partir de l'implémentation de contraintes
L'objectif est de créer une interface dans Go qui prend en charge l'enregistrement et le chargement des résultats dans différentes bases de données tout en prenant en charge différents types de données.
type WritableType interface { ~int | ~string | ~float64 } type ConfigStorage[K, V WritableType] interface { get(key K) (V, error) set(key K, value V) (bool, error) }
Le problème se pose lors de la mise en œuvre d'un système de fichiers stockage :
type FileSystemStorage[K, V WritableType] struct { } func (f FileSystemStorage[K, V]) get(key K) (V, error) { // Code to load data from JSON file } func (f FileSystemStorage[K, V]) set(key K, value V) (bool, error) { // Code to save data as JSON file }
Lors de l'appel de SetValue, cela fonctionne avec succès. Cependant, lors de l'appel de GetValue, le compilateur rencontre une erreur :
cannot infer V
Solutions
Pour Go 1.21 et supérieur :
Dans Go 1.21, l'inférence de type a été améliorée pour prendre en compte les types utilisés dans les méthodes d'interface. Par conséquent, vous pouvez désormais appeler GetValue sans spécifier de paramètres de type :
result, _ = GetValue(fileStorage, "key")
Pour Go 1.20 et versions antérieures :
Étant donné que l'algorithme d'inférence de type actuel ne permet pas de déduire V à partir d'une implémentation de contrainte, les paramètres de type explicites doivent être fournis lors de l'appel de GetValue :
GetValue[string, string](fileStorage, "key")
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

GO Language Pack Import: Quelle est la différence entre le soulignement et sans soulignement?

Comment écrire des objets et des talons simulés pour les tests en Go?

Comment mettre en œuvre le transfert d'informations à court terme entre les pages du cadre Beego?

Comment puis-je utiliser des outils de traçage pour comprendre le flux d'exécution de mes applications GO?

Comment puis-je définir des contraintes de type personnalisé pour les génériques en Go?

Comment écrire des fichiers dans GO Language de manière pratique?

Comment convertir la liste des résultats de la requête MySQL en une tranche de structure personnalisée dans le langage Go?

Comment rédiger des repères qui reflètent avec précision les performances du monde réel en Go?
