Maison > développement back-end > Golang > le corps du texte

Pourquoi l'assertion de type échoue-t-elle lors de l'implémentation des interfaces « Valuer » et « Scanner » dans Go ?

Patricia Arquette
Libérer: 2024-11-06 20:00:04
original
363 Les gens l'ont consulté

Why Does Type Assertion Fail When Implementing `Valuer` and `Scanner` Interfaces in Go?

Comprendre les assertions de type Golang

Dans Go, on peut définir des types personnalisés basés sur des types existants à l'aide d'alias de type. Dans le scénario donné, le type Role est un alias pour le type chaîne intégré. Cependant, lors de l'implémentation des interfaces Valuer et Scanner pour ce type personnalisé, une erreur est rencontrée.

Résoudre l'erreur

Le message d'erreur suggère qu'il y a un problème avec la conversion de type dans la méthode Scan. Plus précisément, il se plaint de la tentative d'attribuer la valeur convertie à un pointeur vers un rôle.

La première fonction, Scan, est chargée d'extraire une valeur de la base de données et de la convertir au type approprié. Le problème réside dans la ligne d'affectation :

r = (*Role)(value.(string))
Copier après la connexion

L'expression value.(string) tente de convertir le paramètre value en chaîne. Cependant, l'affectation tente ensuite d'attribuer cette valeur convertie à un pointeur vers un rôle. Ceci est incorrect, car la destination doit être de type *Role et non Role. Le code corrigé est :

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}
Copier après la connexion

La deuxième fonction, Value, est chargée de convertir une valeur dans un format compatible avec la base de données. Le code donné est incorrect car il ne suit pas la signature de fonction attendue pour driver.Valuer. Le code corrigé est :

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}
Copier après la connexion

Conclusion

En corrigeant la conversion de type dans la méthode Scan et en ajustant la signature de fonction dans la méthode Value, le code devrait fonctionner comme prévu, permettant au type de rôle personnalisé d'interagir avec le pilote de base de données.

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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!