这个错误可以忽略,但是struct剩余的字段就没法scan了,导致了字段获取不全,我要是想如果是null就赋值这个类型的默认值,可以吗?
在结构体里用 sql.Nullxxx 来处理,如果觉得这样用着不爽的话,可以试试 https://gitee.com/xuesongtao/spellsql 轻量级 orm, 能自处理 Null 的情况,能覆盖我们平时工作用的90%以上的场景
#4
更多评论
在使用structScan函数时,如果遇到结构体中的某个字段的值为NULL,则默认情况下structScan会将该NULL值转换为一个空字符串,而这可能会导致converting NULL to string is unsupported的错误。
为了避免这个错误,可以在调用structScan函数之前,将结构体中所有可能出现NULL值的字段都设置为指针类型,而不是基本类型。这样,在处理NULL值时,可以通过判断指针是否为空来避免该错误的出现。
例如,假设我们有一个结构体定义如下:
type User struct {
ID int64
Name string
Age int
Address string
}
如果我们希望在使用structScan函数时避免converting NULL to string is unsupported错误,可以将Age和Address字段改为指针类型,如下所示:
type User struct {
ID int64
Name string
Age *int
Address *string
}
然后,在调用structScan函数时,可以像下面这样进行处理:
var user User
err := db.QueryRow("SELECT id, name, age, address FROM users WHERE id=?", userID).Scan(&user.ID, &user.Name, &user.Age, &user.Address)
if err != nil {
// 处理错误
}
if user.Age == nil {
// Age 字段的值为 NULL
} else {
// Age 字段的值为非 NULL
}
if user.Address == nil {
// Address 字段的值为 NULL
} else {
// Address 字段的值为非 NULL
}
这样,即使在处理NULL值时,也不会出现converting NULL to string is unsupported错误。
#2