Maison > développement back-end > Golang > Comment implémenter correctement l'assertion de type pour la compatibilité des pilotes de base de données dans Golang ?

Comment implémenter correctement l'assertion de type pour la compatibilité des pilotes de base de données dans Golang ?

Linda Hamilton
Libérer: 2024-11-08 05:22:02
original
477 Les gens l'ont consulté

How to Correctly Implement Type Assertion for Database Driver Compatibility in Golang?

Assertion de type Golang pour la compatibilité des pilotes de base de données

Dans cet exemple, un type nommé Role est défini comme un alias de type pour le type de chaîne. L'objectif est d'implémenter les interfaces Valuer et Scanner pour fonctionner avec un pilote de base de données. Cependant, une erreur est rencontrée lors de la compilation en raison de la conversion de type dans la méthode Scan.

Plus précisément, le code tente d'attribuer la valeur de chaîne convertie au pointeur r de type Role. Cependant, la bonne façon d'effectuer une assertion de type dans ce cas consiste à utiliser la syntaxe d'affectation r = Role(value.(string))*. Cela attribue la valeur convertie directement à la variable de rôle déréférencée.

De plus, la signature de la méthode Value pour un driver.Valuer n'est pas telle que définie dans le code. Il devrait s'agir de func (r Role) Value() (driver.Value, erreur). Cette méthode renvoie la représentation sous forme de chaîne de la valeur Role.

Voici un exemple corrigé des méthodes Scan et Value :

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}

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

En effectuant ces ajustements, le code se compilera avec succès et permettra le type de rôle à utiliser 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