MySQL のビット型を Go の型にマッピングする方法
MySQL では、bit(1) データ型はブール値の格納に使用されます。 Go に移行する場合、開発者は、マッピング先の適切な Go タイプを決定するという課題に直面することがよくあります。
質問:
この例では、MySQL テーブルに という名前の列が含まれています。タイプ bit(1) が削除されました。 Go 構造体でこの列を表すにはどの Go 型を使用する必要がありますか?
回答:
推奨されるアプローチは、sqlx ライブラリで提供されるカスタム データ型を使用することです。 sqlx は、特に BIT(1) 値を処理する BitBool という型を定義します:
// BitBool is an implementation of a bool for the MySQL type BIT(1). // This type allows you to avoid wasting an entire byte for MySQL's boolean type TINYINT. type BitBool bool
BitBool は、Go の bool 型と MySQL の BIT(1) 型の間の変換に必要なインターフェイスを実装します:
// Value implements the driver.Valuer interface, // and turns the BitBool into a bitfield (BIT(1)) for MySQL storage. func (b BitBool) Value() (driver.Value, error) { if b { return []byte{1}, nil } else { return []byte{0}, nil } } // Scan implements the sql.Scanner interface, // and turns the bitfield incoming from MySQL into a BitBool func (b *BitBool) Scan(src interface{}) error { v, ok := src.([]byte) if !ok { return errors.New("bad []byte type assertion") } *b = v[0] == 1 return nil }
提供された Go 構造体では、Deleted を宣言する必要がありますとして:
Deleted BitBool `form:"-"`
以上がMySQL の「bit(1)」型を Go 型にマッピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。