Maison >développement back-end >Golang >Pourquoi l'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString » se produit-elle dans la bibliothèque GORM de Go, et comment peut-elle être résolue ?
Comprendre l'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString »
Dans Go, gorm.Model fournit des fonctionnalités pour travailler avec bases de données utilisant SQL. Lors de la création de modèles de base de données à l'aide de GORM, les types de données doivent être déclarés de manière appropriée pour correspondre à leurs types de données SQL correspondants. L'erreur « Impossible d'utiliser la chaîne de type comme sql.NullString » se produit lorsque vous tentez d'attribuer une valeur de chaîne à un champ qui a été déclaré comme sql.NullString.
sql.NullString : A Struct, Not a String
Le type sql.NullString n'est pas un type de chaîne en lui-même, mais plutôt une structure. Il comprend deux champs : String (la valeur réelle de la chaîne) et Valid (un booléen indiquant si la valeur de la chaîne est valide ou NULL).
Initialiser correctement sql.NullString
Pour initialiser correctement une valeur sql.NullString, fournissez une structure sql.NullString avec les champs String et Valid définis de manière appropriée. Par exemple :
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: sql.NullString{String: "a string goes here", Valid: true}, Holyday: false, })</code>
Alternative : définir un type de chaîne nullable
Alternativement, vous pouvez définir un type de chaîne nullable personnalisé, en implémentant le sql.Scanner et le pilote. Interfaces d'évaluation. En exploitant l'octet nul, vous pouvez signaler des valeurs NULL.
<code class="go">type MyString string const MyStringNull MyString = "\x00" // Implement driver.Valuer to convert to database value func (s MyString) Value() (driver.Value, error) { if s == MyStringNull { return nil, nil } return []byte(s), nil } // Implement sql.Scanner to convert from database value func (s *MyString) Scan(src interface{}) error { // Handle different types switch v := src.(type) { case string: *s = MyString(v) case []byte: *s = MyString(v) case nil: *s = MyStringNull } return nil }</code>
Avec cette approche, vous pouvez utiliser votre type de chaîne nullable personnalisé comme suit :
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: "a string goes here", // implicitly converted to MyString Holyday: false, })</code>
Remarque : Une conversion explicite peut être requise lors de l'attribution de valeurs de chaîne saisies au type de chaîne nullable personnalisé.
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!