doushenken2833 2018-11-21 17:16 采纳率: 0%
浏览 676
已采纳

将bool转换为tinyint golang

I am using the latest version of xorm and want to create a simple go struct as follows:

types myStruct struct {
    isDeleted bool `xorm:"'isDeleted' tinyint(3)"`
}

I know the bool type in go evaluates to true and false, but I need to map it to a mySql database where the values are tinyint(3) and 1 maps to true and 0 to false. In the example above no matter what my post requests look like isDeleted always evaluates to 0. Thanks in advance for any advice on this issue. This https://github.com/go-xorm/xorm/issues/673 may provide some context.

  • 写回答

1条回答 默认 最新

  • douxin20081125 2018-11-21 18:09
    关注

    I'm not sure what/if xorm can do about it, but you can just create a type and implement the Valuer and Scanner interfaces for it. Here is an example I did a pull request for using a bit(1) for a bool.

    https://github.com/jmoiron/sqlx/blob/master/types/types.go#L152

    For an integer, you would just return the int instead of a []byte containing the int. Like so:

    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
    }
    

    Then your struct would just use the new type

    type myStruct struct {
        isDeleted IntBool `xorm:"'isDeleted' tinyint(3)"`
    }
    

    But, again, is there any particular reason you declared this boolean value as a tinyint? MySQL has a boolean type and things would just work.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?