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?

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?

Linda Hamilton
Linda HamiltonOriginal
2024-11-06 15:43:02478Durchsuche

Why does the error

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn