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
}