gpt4 book ai didi

mysql - 如何在golang中获取MySQL的BIT(64)

转载 作者:行者123 更新时间:2023-12-01 21:12:23 25 4
gpt4 key购买 nike

我是新手,尝试从MySQL读取数据。架构:“id:INT(11),头:TEXT,过滤器:BIT(64)”
我尝试以常见方式执行此操作:

type News struct {
Id int `field:"id"`
Head string `field:"head"`
Filter uint64 `field:"filter"`
}
...
rows.Scan(&item.Id, &item.Head, &item.Filter)
并得到:
Scan error on column index 2, name "filter": converting NULL to uint64 is unsupported
我尝试了一些示例 with reflection,但没有结果。
我尝试使自己的类型像 here(真的不明白这一点):
type BitMask uint64
func (bits *BitMask) Scan(src interface{}) error {
str, ok := src.(string)
if !ok {
return fmt.Errorf("Unexpected type for BitMask: %T\n", src)
}
fmt.Println(str)
//var v uint64 = 0
//*bits = v // <- Also have error here
return nil
}
并得到了类似的错误:“BitMask的意外类型:

最佳答案

我做出这个回答只是为了结束问题并总结结果。因此,有两种方法:
1写自己的类型:

type BitMask sql.NullInt64

func (bits *BitMask) Scan(src interface{}) error {
if src == nil {
bits.Int64 = 0
bits.Valid = false
return nil
}
buf, ok := src.([]byte)
if !ok {
return fmt.Errorf("Unexpected type for BitMask: %T\n", src)
}
if len(buf) != 8 {
bits.Int64 = 0
bits.Valid = false
return errors.New("Size of bit filed is not 8 bytes\n")
}
bits.Int64 = 0
for i := range buf {
bits.Int64 *= 256
bits.Int64 = int64(buf[i])
}
bits.Valid = true
return nil
}
  • 不要使用BIT(64),而是使用UNSIGNED BIGINT。因为有no advanteges,所以只有问题。 (这就是我要做的)
  • 关于mysql - 如何在golang中获取MySQL的BIT(64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63947411/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com