Heim > Artikel > Backend-Entwicklung > Wie gehe ich mit Nullable-String-Feldern mit GORM und sql.NullString um?
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.
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, })
Alternativ, um die einfachere Initialisierungssyntax beizubehalten:
Definieren Sie einen benutzerdefinierten nullbaren Zeichenfolgentyp:
type MyString string
Ü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 }
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!