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

chen05_20 · 2023-03-25 14:52:03 · 3343 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-03-25 14:52:03 的主题,其中的信息可能已经有所发展或是发生改变。

这个错误可以忽略,但是struct剩余的字段就没法scan了,导致了字段获取不全,我要是想如果是null就赋值这个类型的默认值,可以吗?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3343 次点击  
加入收藏 微博
4 回复  |  直到 2023-04-01 20:38:27
jan-bar
jan-bar · #1 · 2年之前

sql.Nullstring,sql.Nullint,标准库里面有这些类型可以接收允许NULL类型的列

freedbg
freedbg · #2 · 2年之前

在使用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错误。

Neightly
Neightly · #3 · 2年之前

年轻人不讲武德。

image.png

xuesongtao
xuesongtao · #4 · 2年之前

在结构体里用 sql.Nullxxx 来处理,如果觉得这样用着不爽的话,可以试试 https://gitee.com/xuesongtao/spellsql 轻量级 orm, 能自处理 Null 的情况,能覆盖我们平时工作用的90%以上的场景

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传