MySQL 的位类型:与 Go 的自定义 Bool 完美匹配
问题:
在数据库表中带有 bit(1) 类型的列,如何使用 Beego 的 ORM 将其映射到 Go 类型?
答案:
由于 Go 没有构建-in type for bit(1),推荐的方法是创建自定义 bool 类型。
为 MySQL 的 Bit(1) 自定义 Bool
为了解决这个问题,自定义一个可以创建 bool 类型来处理 bit(1) 列。
type BitBool bool // Value converts BitBool to 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 converts the incoming bitfield 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 结构中的用法
要在 Go 结构中使用自定义 BitBool 类型,只需声明它作为相应字段的类型:
type BaseModel struct { Id string `orm:"pk";form:"id"` CreatedTime time.Time `orm:"auto_now_add;type(datetime)";form:"-"` UpdatedTime time.Time `orm:"auto_now;type(datetime)";form:"-"` Deleted BitBool `form:"-"` }
通过使用自定义 BitBool 类型,您可以将 MySQL 的 bit(1) 类型映射到适当处理位操作的 Go 类型,从而避免以下错误使用默认的 bool 类型。
以上是如何使用 Beego 的 ORM 将 MySQL 的 bit(1) 类型映射到 Go 类型?的详细内容。更多信息请关注PHP中文网其他相关文章!