Beim Erstellen eines GORM-Modells mit einem Feld vom Typ sql.NullString, ein Versuch Das Initialisieren des Felds mit einem Zeichenfolgenwert führt zu folgendem Fehler:
cannot use "a string goes here", (type string) as type sql.NullString in field value
Der Typ sql.NullString ist eigentlich kein Zeichenfolgentyp, sondern eine Struktur, die eine Zeichenfolge und einen booleschen Wert kapselt Flag, das angibt, ob die Zeichenfolge gültig ist (nicht NULL). Um ein sql.NullString-Feld zu initialisieren, muss es mit einem Strukturwert und nicht mit einem Zeichenfolgenwert initialisiert werden.
Der folgende Code zeigt, wie ein sql.NullString-Feld korrekt initialisiert wird:
<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>
Alternativ kann ein benutzerdefinierter nullfähiger Zeichenfolgentyp definiert werden, der die Schnittstellen sql.Scanner und drivers.Valuer implementiert und ein Nullbyte verwendet, um einen NULL-Wert zu signalisieren. Mit diesem benutzerdefinierten Typ kann die ursprüngliche Syntax verwendet werden, um ein nullfähiges Zeichenfolgenfeld zu initialisieren.
Benutzerdefinierter Typ:
<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>
Verwendung:
<code class="go">db.Create(&Day{ Nameday: "Monday", Dateday: "23-10-2019", // no need for explicit typing/conversion Something: "a string goes here", Holyday: false, })</code>
Das obige ist der detaillierte Inhalt vonWie initialisiere ich ein sql.NullString-Feld in GORM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!