首页 > 后端开发 > Golang > 正文

如何使用 Beego 的 ORM 将 MySQL 的 bit(1) 类型映射到 Go 类型?

DDD
发布: 2024-11-17 04:14:03
原创
409 人浏览过

How can I map MySQL's bit(1) type to a Go type using Beego's ORM?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板