Go问答技术文章
-
math/big.Int.SetString 返回的是大整数指针和成功布尔值,不会单独返回 error。本文围绕进制参数、前缀、失败返回值和边界封装,说明为什么解析失败时会得到 nil,以及怎样安全处理。153 收藏 -
Go DirFS 只保证从指定目录开始打开文件,不会自动阻止符号链接越过根目录。本文区分 fs.ValidPath 的词法检查与真实文件边界,并给出 Go 1.24 起使用 os.OpenInRoot 和 os.Root.FS 的处理方式。153 收藏 -
Go 的 map 遍历顺序由语言规范明确为未指定,不能把某次输出顺序当成稳定结果。本文解释 range 的真实保证,并给出排序键后生成确定性输出的写法。153 收藏 -
Go 子测试里 t.Cleanup 什么时候执行?本文用父子测试和并行子测试说明清理注册、执行顺序与资源归属,帮助你避免把 defer 和 Cleanup 的生命周期混在一起。153 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · JSON · go · 故障排查 · 故障排查 Go encoding/json JSON指针 json.InvalidUnmarshalError
Go json.Unmarshal 的目标参数必须是非空指针。本文区分结构体值、nil 接口、nil 指针和指向指针变量的外层指针,并用 errors.As 识别 InvalidUnmarshalError,避免把参数错误与 JSON 语法或字段类型错误混为一谈。152 收藏 -
Go test -json 可将测试输出保存为逐行 JSON 事件。本文给出保留退出码和 stderr 的采集脚本,说明测试事件与构建事件的区别,以及运行标识、字段映射、并发归组和日志接入的注意事项。152 收藏 -
Go mime.WordDecoder 遇到自定义字符集时会调用 CharsetReader。回调返回 nil,error 会把错误交给 DecodeHeader;返回 nil,nil 则违反必须提供 Reader 或 error 的契约,不能当作跳过转换。本文用最小回调解释失败原因、定位方法和修复方式。152 收藏 -
Go 1.16 将 io/ioutil 的能力分散到 io 和 os。本文按函数职责整理 ReadFile、ReadDir、ReadAll、临时文件等迁移方式,并说明 DirEntry 与 FileInfo 的兼容边界。151 收藏 -
Go vet 报告和编译器错误都可能返回非零状态,但处理边界不同。本文从包构建、静态分析、退出状态和 CI 分流几个角度说明如何判断与处理。151 收藏 -
Go init 顺序变化通常不是 init 语法失效,而是包依赖、包级变量依赖、源文件呈现顺序或隐藏副作用发生了变化。本文给出排查边界,并用显式 Setup 替代关键启动动作。151 收藏 -
sql.Named 没有把 SQL 字符串改写成统一语法,命名参数是否生效取决于名称、占位符和数据库驱动三者是否匹配。本文用最小示例给出排查顺序。151 收藏 -
hex.NewDecoder 遇到奇数个十六进制字符时返回的是 io.ErrUnexpectedEOF,而不是 hex.ErrLength。本文按 n、错误类型和输入边界说明如何处理已解码字节、奇数尾部与非法字符。151 收藏 -
Go 反射赋值遇到 CanSet 为 false 时,先区分不可寻址副本与未导出字段,再用指针、Elem 和类型检查安全完成修改。151 收藏 -
Go 的 JSON 数字进入 interface{} 后默认会解码为 float64。本文解释原因,并用结构体、Decoder.UseNumber 和 json.Number 给出固定字段与动态字段的处理方案。150 收藏 -
Go log/slog 中真正负责展开 LogValuer 的是 slog.Value.Resolve。本文说明 Attr、Value 与 LogValuer 的关系,讲清嵌套返回值、Group 不递归和递归保护边界,并给出自定义 Handler 的处理顺序。150 收藏