将布尔转化为tinyint golang

将布尔转化为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。提前感谢您对这

我正在使用最新版本的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。提前感谢您对这个问题的任何建议。这可能提供一些背景

我不确定/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
而不是
布尔值的任何特定原因?这可以通过让数据库处理来避免。