go-sql-driver/mysql
Gustavo Ibarra提议the workaround:
type Transaction struct {
IsSent sql.NullBool `gorm:"column:is_sent" json:"isSent,omitempty"`
}
与:
CREATE TABLE `transaction` (
`is_sent` tinyint(1) unsigned DEFAULT '0',
...
它成功了,得到如下 JSON 响应:
"isSent": {
"Bool": true,
"Valid": true
},
BitBool
// BitBool is an implementation of a bool for the MySQL type BIT(1).
// This type allows you to avoid wasting an entire byte for MySQL's boolean type TINYINT.
type BitBool bool
// Value implements the driver.Valuer interface,
// and turns the BitBool into 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 implements the sql.Scanner interface,
// and turns the bitfield incoming 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
}