Go问答技术文章
-
Go database/sql 的 Scan 把数据库 NULL 作为 nil 传入,直接接收为普通 string 会因无法表达空值而报错。本文对比 sql.NullString、sql.Null[string] 与 COALESCE 的适用边界。244 收藏 -
Go ast.NewCommentMap 不会重新读取源码。结果为空时应先确认 ParseComments 是否启用及 file.Comments 是否有内容,再区分位置上下文、节点范围和文档注释字段。244 收藏 -
GJSON 的 Float() 返回 float64,大于 2^53 的整数不能都被浮点数精确表示。本文对比 Result.Raw、String、Float、Int 和 Uint,说明订单号、用户 ID 等大整数应该怎样读取。243 收藏 -
Go Expr 规则访问可选指针字段时,先用 nil 条件保护成员访问,再复用编译后的 program;同时区分 Compile、Run、未定义变量和关闭短路的边界。243 收藏 -
Go 日志在容器里延迟出现,通常不是一个笼统的“Go 有缓冲”问题。本文沿着 log/slog 的 handler、stdout/stderr、容器日志流和采集器批量策略逐段定位,并给出不增加无谓缓冲的修复方式。243 收藏 -
Go pprof CPU 图没有业务函数,通常不是 pprof 失效,而是采样窗口没有覆盖业务 CPU、符号化没有拿到匹配二进制,或过滤参数把业务节点隐藏。本文按资产、风险链路和复查动作给出排查顺序。243 收藏 -
Go context deadline exceeded 只能说明当前上下文因截止时间结束,不能直接定位来源。本文用 WithTimeoutCause、context.Cause 和 errors.Is 区分本地总预算、上游阶段预算与更上层请求超时。243 收藏 -
SQLX Select 会把查询结果逐行映射并追加到目标切片,结果规模没有上限时会放大内存、对象和连接占用。本文说明 Select 的真实语义,并给出分页与 Queryx 加 StructScan 的取舍。243 收藏 -
Go GJSON 的数组条件查询中,#(...) 取第一个匹配项,#(...)# 才会收集全部匹配项。本文用同一份数据对比两种路径的返回形态、Go 代码读取方式、空结果边界和接口设计取舍。242 收藏 -
Go 监听 socket 选项不生效,应先确认 ListenConfig 是否接入实际监听路径,再检查 Control 的绑定前时机、实际网络名称及两层错误。本文给出 Linux 示例,并说明跨平台实现和选项读回的判断范围。242 收藏 -
os.WriteFile 的 perm 参数只在创建新文件时参与权限设置,覆盖已有文件时会保留原权限。本文从 PathError、父目录、运行身份和只读挂载四层排查 permission denied,并说明何时改用 OpenFile 或显式 Chmod。242 收藏 -
Go 反射读取字段时,CanInterface 用来判断 Value.Interface 是否可以安全调用。本文用导出字段、未导出字段、无效 Value 和 CanSet 对照说明判断顺序,给出通用读取函数的降级写法。242 收藏 -
Go time.Format 用固定参考时间片段识别年月日和时分秒,输出值来自实际时间。通过固定日期示例,说明补零、小数秒、12小时制与时区,并区分布局和目标日期。242 收藏 -
Go x/image/font/sfnt 的 UnitsPerEm 是字体内部的抽象单位数量,不是输出图片的字号。本文用 ppem、26.6 定点坐标、Metrics 与 GlyphBounds 拆开定位,让字号、字形边界和画布尺寸各自承担正确职责。242 收藏 -
go test -run 匹配的是测试标识而不是文件名,未转义斜杠还会表达父子测试层级。本文说明普通片段、完整锚定、子测试选择、包位置、shell 引号与 -list 排查方法,帮助定位为什么目标用例没有命中。242 收藏