Go の GORM ライブラリで「型文字列を sql.NullString として使用できません」というエラーが発生するのはなぜですか?また、その解決方法は何ですか?

Linda Hamilton
リリース: 2024-11-06 15:43:02
オリジナル
485 人が閲覧しました

Why does the error

「型文字列を sql.NullString として使用できません」エラーを理解する

Go では、gorm.Model は操作するための機能を提供します。 SQLを使用したデータベース。 GORM を使用してデータベース モデルを作成する場合は、対応する SQL データ型と一致するようにデータ型を適切に宣言する必要があります。 「文字列型を sql.NullString として使用できません」エラーは、sql.NullString.

sql.NullString: A Struct, Not として宣言されているフィールドに文字列値を代入しようとすると発生します。 a String

sql.NullString 型は文字列型そのものではなく、構造体です。これは、String (実際の文字列値) と Valid (文字列値が有効か NULL かを示すブール値) の 2 つのフィールドで構成されます。

sql.NullString を適切に初期化しています

sql.NullString 値を正しく初期化するには、String フィールドと Valid フィールドの両方が適切に設定された 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 許容文字列型の定義

または、sql.Scanner とドライバーを実装して、カスタムの Null 許容文字列型を定義できます。評価者インターフェイス。 null バイトを利用することで、NULL 値を通知できます。

<code class="go">type MyString string

const MyStringNull MyString = "\x00"

// Implement driver.Valuer to convert to database value
func (s MyString) Value() (driver.Value, error) {
    if s == MyStringNull {
        return nil, nil
    }
    return []byte(s), nil
}

// Implement sql.Scanner to convert from database value
func (s *MyString) Scan(src interface{}) error {
    // Handle different types
    switch v := src.(type) {
    case string:
        *s = MyString(v)
    case []byte:
        *s = MyString(v)
    case nil:
        *s = MyStringNull
    }
    return nil
}</code>
ログイン後にコピー

このアプローチでは、次のようにカスタムの null 許容文字列型を使用できます。

<code class="go">db.Create(&Day{
    Nameday:     "Monday",
    Dateday:     "23-10-2019",
    Something:   "a string goes here", // implicitly converted to MyString
    Holyday:      false,
})</code>
ログイン後にコピー

注: 型指定された文字列値をカスタムの null 許容文字列型に割り当てる場合は、明示的な変換が必要になる場合があります。

以上がGo の GORM ライブラリで「型文字列を sql.NullString として使用できません」というエラーが発生するのはなぜですか?また、その解決方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!