Heim > Artikel > Backend-Entwicklung > Warum tritt in der GORM-Bibliothek von Go der Fehler „Typzeichenfolge kann nicht als sql.NullString verwendet werden“ auf und wie kann er behoben werden?
Verstehen des Fehlers „Typzeichenfolge kann nicht als sql.NullString verwendet werden“
In Go bietet das gorm.Model Funktionalität zum Arbeiten Datenbanken mit SQL. Beim Erstellen von Datenbankmodellen mit GORM müssen Datentypen entsprechend deklariert werden, damit sie mit ihren entsprechenden SQL-Datentypen übereinstimmen. Der Fehler „Typzeichenfolge kann nicht als sql.NullString verwendet werden“ tritt auf, wenn versucht wird, einem Feld, das als sql.NullString deklariert wurde, einen Zeichenfolgenwert zuzuweisen.
sql.NullString: A Struct, Not ein String
Der sql.NullString-Typ ist selbst kein String-Typ, sondern eine Struktur. Es besteht aus zwei Feldern: String (der tatsächliche String-Wert) und Valid (ein boolescher Wert, der angibt, ob der String-Wert gültig oder NULL ist).
sql.NullString ordnungsgemäß initialisieren
Um einen sql.NullString-Wert korrekt zu initialisieren, stellen Sie eine sql.NullString-Struktur bereit, wobei sowohl die Felder „String“ als auch „Valid“ entsprechend festgelegt sind. Zum Beispiel:
<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: Definieren eines Nullable-String-Typs
Alternativ können Sie einen benutzerdefinierten Nullable-String-Typ definieren, indem Sie den sql.Scanner und den Treiber implementieren. Gutachterschnittstellen. Durch die Nutzung des Nullbytes können Sie NULL-Werte signalisieren.
<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>
Mit diesem Ansatz können Sie Ihren benutzerdefinierten nullbaren Zeichenfolgentyp wie folgt verwenden:
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", Something: "a string goes here", // implicitly converted to MyString Holyday: false, })</code>
Hinweis: Möglicherweise ist eine explizite Konvertierung erforderlich, wenn typisierte Zeichenfolgenwerte dem benutzerdefinierten nullfähigen Zeichenfolgentyp zugewiesen werden.
Das obige ist der detaillierte Inhalt vonWarum tritt in der GORM-Bibliothek von Go der Fehler „Typzeichenfolge kann nicht als sql.NullString verwendet werden“ auf und wie kann er behoben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!