关于structScan,如何避免 converting NULL to string is unsupported 这个错误?

chen05_20 · · 3267 次点击
xuesongtao
用心做事,用情待人,用脑铸码
在结构体里用 sql.Nullxxx 来处理,如果觉得这样用着不爽的话,可以试试 https://gitee.com/xuesongtao/spellsql 轻量级 orm, 能自处理 Null 的情况,能覆盖我们平时工作用的90%以上的场景
#4
更多评论
jan-bar
想要拥有,必定付出。
`sql.Nullstring`,`sql.Nullint`,标准库里面有这些类型可以接收允许NULL类型的列
#1
在使用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