Heim > Backend-Entwicklung > Golang > Wie gehe ich mit Nullable-Strings in GORM-Modellen um?

Wie gehe ich mit Nullable-Strings in GORM-Modellen um?

Patricia Arquette
Freigeben: 2024-11-06 01:28:02
Original
891 Leute haben es durchsucht

How to Handle Nullable Strings in GORM Models?

String-Typ kann nicht als sql.NullString verwendet werden

Beim Erstellen eines GORM-Modells kann ein Fehler auftreten, wenn Sie versuchen, a zu verwenden Zeichenfolgentyp für ein Feld, das nullwertfähig sein muss. Das Problem tritt auf, wenn sql.NullString für Felder verwendet wird, die NULL-Werte zulassen.

Problem:

Die Fehlermeldung, die Sie erhalten: „Eine Zeichenfolge kann hier nicht verwendet werden“ ( Typ string) als Typ sql.NullString im Feldwert“ zeigt an, dass Sie versuchen, einem sql.NullString-Feld direkt eine Zeichenfolge zuzuweisen. Allerdings ist sql.NullString kein String-Typ, sondern ein Strukturtyp, der NULL-fähige Strings darstellen soll.

Lösung:

Um dieses Problem zu beheben, müssen Sie eine Initialisierung durchführen das sql.NullString-Feld korrekt. Es sollte wie folgt initialisiert werden:

<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>
Nach dem Login kopieren

Alternative Lösung:

Wenn Sie lieber eine vereinfachte Syntax für Nullable-Strings verwenden möchten, können Sie Ihren eigenen Nullable-String-Typ erstellen Implementierung der Schnittstellen „sql.Scanner“ und „driver.Valuer“ und Nutzung des Nullbytes, um einen NULL-Wert zu signalisieren.

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// implements driver.Valuer, will be invoked automatically when written to the db
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// implements sql.Scanner, will be invoked automatically when read from the db
func (s *MyString) Scan(src interface{}) error {
    switch v := src.(type) {
    case string:
        *s = MyString(v)
    case []byte:
        *s = MyString(v)
    case nil:
        *s = MyStringNull
    }
    return nil
}</code>
Nach dem Login kopieren

Mit diesem Typ können Sie das Feld „Something“ wie folgt initialisieren:

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   "a string goes here",
    Holyday:     false,
})</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullable-Strings in GORM-Modellen um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage