Assertion de type Golang : gestion des conversions de types de base de données
Dans Go, les assertions de type nous permettent de convertir une valeur en un type différent en fonction de son type réel. Ceci est utile lorsque vous travaillez avec des types dynamiques ou implémentez des interfaces personnalisées.
Considérez un scénario dans lequel nous créons un type personnalisé appelé Rôle basé sur une chaîne et souhaitons l'utiliser avec un pilote de base de données. Pour ce faire, nous devons implémenter les interfaces Valuer et Scanner.
Cependant, lors de l'implémentation de ces interfaces, nous pouvons rencontrer l'erreur :
cannot convert value.(string) (type string) to type *Role
Solution pour la fonction Scan :
La fonction Scan est utilisée lors de la récupération de données à partir d'une base de données. Le problème se pose parce que nous essayons de convertir la valeur du type chaîne directement en un pointeur *Role. Au lieu de cela, nous devrions déréférencer le pointeur r et lui attribuer la valeur de value, comme ceci :
func (r *Role) Scan(value interface{}) error { *r = Role(value.(string)) return nil }
Solution pour la fonction Value :
La fonction Value est utilisé lors de l'insertion ou de la mise à jour de données dans une base de données. La signature incorrecte a été fournie plus tôt. La signature correcte est :
func (r Role) Value() (driver.Value, error) { return string(r), nil }
Notez que cette fonction ne gère ni ne produit de valeurs NULL.
En suivant ces corrections, nous pouvons implémenter avec succès la conversion de type pour notre type de rôle personnalisé lorsque travailler avec des pilotes 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!