「型文字列を 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 サイトの他の関連記事を参照してください。