Go语言如何用sqlx_Go语言sqlx数据库操作教程【入门】

张开发
2026/4/8 2:42:42 15 分钟阅读

分享文章

Go语言如何用sqlx_Go语言sqlx数据库操作教程【入门】
sqlx.QueryRow() 查不到数据返回 sql.ErrNoRows需用 errors.Is(err, sql.ErrNoRows) 显式判断其他错误如连接失败、语法错误应单独处理不可一概而论。sqlx.QueryRow() 返回 sql.ErrNoRows 怎么安全处理sqlx.QueryRow() 查不到数据时不会 panic而是返回 sql.ErrNoRows —— 这是 Go 常见的“预期错误”不是 bug。很多人直接忽略 err 或用 if err ! nil 一锅端结果把数据库连接失败、语法错误和“没查到”混为一谈。用 errors.Is(err, sql.ErrNoRows) 显式判断是否只是“无结果”其他 err 要单独处理比如记录日志、返回 HTTP 404 或 500别在 defer 里对 *sqlx.Row 调用 Scan()它只执行一次重复调用会 panic如果业务上“查不到 合法状态”建议用指针接收配合零值默认逻辑例如var name emstring/em然后 if name nil { / 未找到 */ }struct 字段怎么和 SQL 列名正确映射sqlx 默认按字段名非 tag匹配列名但 Go 字段大写、SQL 列常小写下划线不配 tag 就会扫不到。必须加 db tag例如type User struct { ID int codedb:id Name string db:user_name }tag 值区分大小写要和 SELECT 出来的列名完全一致哪怕数据库是 case-insensitivesqlx 解析时不忽略大小写不要混用 json 和 db tag虽然字段名碰巧一样但语义不同一个漏写就 silently 失效如果用 SELECT *务必确保 struct 字段数、顺序、tag 全部匹配否则 Scan() 会报 sql: expected 3 destination arguments in Scan, not 2为什么 sqlx.Select() 返回空 slice 却不报错sqlx.Select() 查不到数据时返回 []T{}长度为 0 的切片err 是 nil —— 这是设计使然不是异常。新手常误以为“没报错有数据”结果后续遍历时逻辑跳过。检查结果前先看 len(users)别只依赖 err如果业务要求“至少一条”需要手动校验if len(users) 0 { return fmt.Errorf(no users found) }注意空 slice 和 nil slice 都能被 json.Marshal 正确序列化但 nil 判断对空 slice 返回 false容易引发空指针联想错误事务里用 sqlx.NamedExec() 报 driver: bad connection在 *sqlx.Tx 上用命名参数执行时出这个错大概率不是连接断了而是参数 map 里键名和 SQL 中的 :name 不匹配或者传了 nil 值但字段不允许 NULL。 Adobe Image Background Remover Adobe推出的图片背景移除工具

更多文章