ホームページ >バックエンド開発 >Golang >GORM モデルで Null 許容文字列を処理するにはどうすればよいですか?

GORM モデルで Null 許容文字列を処理するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 01:28:02893ブラウズ

How to Handle Nullable Strings in GORM Models?

文字列型を sql.NullString として使用できません

GORM モデルの作成時に、 NULL 可能にする必要があるフィールドの文字列タイプ。この問題は、null 許容フィールドに sql.NullString を使用するときに発生します。

問題:

発生するエラー、「"文字列はここにあります" を使用できません」( type string) as type sql.NullString in field value」は、文字列を sql.NullString フィールドに直接割り当てようとしていることを示します。ただし、sql.NullString は文字列型ではなく、null 許容文字列を表すように設計された構造体型です。

解決策:

この問題を解決するには、初期化する必要があります。 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>

代替解決策:

Null 許容文字列の簡略化された構文を使用したい場合は、次のようにして独自の Null 許容文字列型を作成できます。 sql.Scanner インターフェイスと driver.Valuer インターフェイスを実装し、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>

この型を使用すると、Something フィールドを次のように初期化できます:

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   "a string goes here",
    Holyday:     false,
})</code>

以上がGORM モデルで Null 許容文字列を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。