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 }
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!