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
Freigeben: 2024-11-06 03:29:02
Original
708 Leute haben es durchsucht

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

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

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

Alternative Lösung

Alternativ, um die einfachere Initialisierungssyntax beizubehalten:

  1. Definieren Sie einen benutzerdefinierten nullbaren Zeichenfolgentyp:

    type MyString string
    Nach dem Login kopieren
  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
    }
    Nach dem Login kopieren
  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,
    })
    Nach dem Login kopieren

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!

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