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 <em>string</em>,然后 if name == nil { / 未找到 */ }struct 字段怎么和 SQL 列名正确映射?sqlx 默认按字段名(非 tag)匹配列名,但 Go 字段大写、SQL 列常小写下划线,不配 tag 就会扫不到。必须加 db tag,例如:type User struct { ID int <code>db:"id" Name string db:"user_name" }tag 值区分大小写,要和 SELECT 出来的列名完全一致(哪怕数据库是 case-insensitive,sqlx 解析时不忽略大小写)不要混用 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推出的图片背景移除工具
相关推荐
qq_401700415 分钟前
Qt 实时大数据量存储:自己动手实现 TDMS 读写再__努力1点7 分钟前
一个开源的AI边缘计算平台:一个项目把算能、瑞芯微、x86的NPU全打通了小oo呆14 分钟前
【学习心得】Python函数参数中的两个特殊分隔符Leon-Ning Liu17 分钟前
Oracle参数对比脚本分享:对比 SPFILE 参数与内存参数差异,支持 11g 到 19cSEO_juper26 分钟前
AI 爬虫 robots.txt 检查工具:你的站是不是把 AI 挡在门外了涛思数据(TDengine)27 分钟前
TDengine TSDB 3.4.3.3 上线:流计算分层闭环、虚拟表跨层引用,查询关联一次写完远方160929 分钟前
118-五大进程LGWR DBWn CKPT SMON PMON 与存储故障-文件系统对照ss27331 分钟前
AI时代首先数据库-PostgreSQL实战笔记 | 17 PostgreSQL SQL高级查询:窗口函数、CASE、COALESCE看我debug32 分钟前
Android 运行时分析工作台 (Demo)。统一管理 Frida 脚本、自动注入(修改运行时代码)、收集结构化结果、生成 JSON 报告。染指111034 分钟前
151.Agent-LangGraph-Send发送(Map-Reduce模式)