ホームページ > バックエンド開発 > Golang > MySQL の「bit(1)」型を Go 型にマッピングするにはどうすればよいですか?

MySQL の「bit(1)」型を Go 型にマッピングするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-23 06:41:16
オリジナル
861 人が閲覧しました

How should I map MySQL's `bit(1)` type to a Go type?

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート