将布尔转化为tinyint golang
我正在使用最新版本的xorm,并希望创建一个简单的go结构,如下所示:将布尔转化为tinyint golang,go,go-xorm,Go,Go Xorm,我正在使用最新版本的xorm,并希望创建一个简单的go结构,如下所示: types myStruct struct { isDeleted bool `xorm:"'isDeleted' tinyint(3)"` } 我知道go中的bool类型的计算结果为true和false,但我需要将其映射到一个mySql数据库,其中的值为tinyint(3),1映射为true,0映射为false。在上面的示例中,无论我的post请求看起来像什么,isDeleted的计算结果始终为0。提前感谢您对这
types myStruct struct {
isDeleted bool `xorm:"'isDeleted' tinyint(3)"`
}
我知道go中的bool类型的计算结果为true和false,但我需要将其映射到一个mySql数据库,其中的值为tinyint(3),1映射为true,0映射为false。在上面的示例中,无论我的post请求看起来像什么,isDeleted的计算结果始终为0。提前感谢您对这个问题的任何建议。这可能提供一些背景 我不确定/if
xorm
可以做什么,但是您可以创建一个类型,并为它实现Valuer
和Scanner
接口。下面是一个示例,我对bool
使用位(1)
执行了一个pull请求
对于整数,只需返回int
,而不是包含int
的[]字节。像这样:
type IntBool bool
// Value implements the driver.Valuer interface,
// and turns the IntBool into an integer for MySQL storage.
func (i IntBool) Value() (driver.Value, error) {
if i {
return 1, nil
}
return 0, nil
}
// Scan implements the sql.Scanner interface,
// and turns the int incoming from MySQL into an IntBool
func (i *IntBool) Scan(src interface{}) error {
v, ok := src.(int)
if !ok {
return errors.New("bad int type assertion")
}
*i = v == 1
return nil
}
那么您的结构将只使用新类型
type myStruct struct {
isDeleted IntBool `xorm:"'isDeleted' tinyint(3)"`
}
但是,您是否有任何特殊原因将此布尔值声明为tinyint
?MySQL有一个布尔类型,一切正常。MySQL中的boolean
是一个tinyint
。列被指定为tinyint
而不是布尔值的任何特定原因?这可以通过让数据库处理来避免。