sql.NullString 型のフィールドを持つ GORM モデルを作成するときに、フィールドを文字列値で初期化すると、エラーが発生します:
cannot use "a string goes here", (type string) as type sql.NullString in field value
sql.NullString 型は、実際には文字列型ではなく、文字列とブール値をカプセル化する構造体です。文字列が有効かどうか (NULL ではないか) を示すフラグ。 sql.NullString フィールドを初期化するには、文字列値ではなく、構造体値を使用して初期化する必要があります。
次のコードは、sql.NullString フィールドを正しく初期化する方法を示しています。
<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>
あるいは、sql.Scanner インターフェイスと driver.Valuer インターフェイスを実装し、NULL バイトを使用して NULL 値を通知するカスタムの null 許容文字列型を定義することもできます。このカスタム タイプでは、元の構文を使用して null 許容文字列フィールドを初期化できます。
カスタム タイプ:
<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>
使用法:
<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>
以上がGORM で sql.NullString フィールドを初期化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。