将 bool 转换为 tinyint golang
Convert bool to tinyint golang
我正在使用最新版本的 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。在此先感谢您就此问题提出的任何建议。 https://github.com/go-xorm/xorm/issues/673 可能会提供一些背景信息。
我不确定 what/if xorm
能否做到这一点,但您可以创建一个类型并为其实现 Valuer
和 Scanner
接口。这是一个例子,我做了一个使用 bit(1)
作为 bool
.
的拉取请求
https://github.com/jmoiron/sqlx/blob/master/types/types.go#L152
对于整数,您只需 return int
而不是包含 int
的 []byte
。像这样:
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 有 布尔类型,一切正常。
我正在使用最新版本的 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。在此先感谢您就此问题提出的任何建议。 https://github.com/go-xorm/xorm/issues/673 可能会提供一些背景信息。
我不确定 what/if xorm
能否做到这一点,但您可以创建一个类型并为其实现 Valuer
和 Scanner
接口。这是一个例子,我做了一个使用 bit(1)
作为 bool
.
https://github.com/jmoiron/sqlx/blob/master/types/types.go#L152
对于整数,您只需 return int
而不是包含 int
的 []byte
。像这样:
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 有 布尔类型,一切正常。