Heim >Backend-Entwicklung >Golang >Wie gehe ich mit Nullable-String-Feldern mit GORM und sql.NullString um?

Wie gehe ich mit Nullable-String-Feldern mit GORM und sql.NullString um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 03:29:02709Durchsuche

How to Handle Nullable String Fields with GORM and sql.NullString?

Typ-String kann nicht als sql.NullString verwendet werden

Abfrage

In GORM steht die Verwendung von sql.NullString für ein Feld, das möglicherweise NULL ist, vor der Herausforderung Fehler:

cannot use "a string goes here", (type string) as type sql.NullString in field value

beim Versuch, ein einfaches GORM-Validierungsbeispiel auszuführen.

Auflösung

sql.NullString ist kein String-Typ, sondern ein Strukturtyp, der definiert ist als:

type NullString struct {
    String string
    Valid  bool // Valid is true if String is not NULL
}

Um es richtig zu initialisieren, verwenden Sie die folgende Syntax:

db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   sql.NullString{String: "a string goes here", Valid: true},
    Holyday:     false,
})

Alternative Lösung

Alternativ, um die einfachere Initialisierungssyntax beizubehalten:

  1. Definieren Sie einen benutzerdefinierten nullbaren Zeichenfolgentyp:

    type MyString string
  2. Implementieren Sie die Schnittstellen sql.Scanner und drivers.Valuer, um die Wertkonvertierung durchzuführen.
  3. Überschreiben die Methoden Value() und Scan() wie folgt:

    func (s MyString) Value() (driver.Value, error) {
        if s == MyStringNull {
            return nil, nil
        }
        return []byte(s), nil
    }
    
    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
    }
  4. Deklarieren Sie das Something-Feld als MyString und initialisieren Sie es wie vorgesehen:

    db.Create(&Day{
        Nameday:     "Monday",
        Dateday:     "23-10-2019",
        // Here, an untyped string constant will explicitly convert to MyString because they have the same underlying type.
        Something:   "a string goes here",
        Holyday:     false,
    })

Das obige ist der detaillierte Inhalt vonWie gehe ich mit Nullable-String-Feldern mit GORM und sql.NullString um?. 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