Maison > développement back-end > Golang > 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 ?

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 ?

Patricia Arquette
Libérer: 2024-12-13 13:45:11
original
501 Les gens l'ont consulté

How Can I Resolve Go's

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

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

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

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

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")
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!

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