如何将 MySQL 的 bit 类型映射到 Go 的类型
在 MySQL 中,bit(1) 数据类型用于存储布尔值。迁移到 Go 时,开发人员经常面临确定将其映射到的适当 Go 类型的挑战。
问题:
在提供的示例中,MySQL 表包含一个名为删除了类型 bit(1)。应使用什么 Go 类型来表示 Go 结构中的此列?
答案:
建议的方法是使用 sqlx 库提供的自定义数据类型。 sqlx 定义了一个名为 BitBool 的类型,专门处理 BIT(1) 值:
// 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中文网其他相关文章!