Go问答技术文章
-
Go embed.FS 读取内嵌资源时,fs.Sub 的根路径、文件名斜杠和 os.Getwd 工作目录经常被混在一起。本文用一个可运行的小实验定位“文件明明在项目里却读不到”的原因,并给出模板、测试和部署检查写法。449 收藏 -
分页接口里的 page、size 不是普通字符串:负数、超大整数和乘法溢出会把查询范围、内存占用甚至数据库压力一起带偏。本文用 Go 标准库拆开参数解析、上限校验、LIMIT/OFFSET 计算和验收清单。225 收藏 -
Go 1.23 的 slices.Chunk 能把切片按固定大小拆成批次,但空切片、n 小于 1、最后一批不足和底层数组共享都容易被误读。本文用批量写入场景说明它的返回边界、内存行为与测试方法。127 收藏 -
Go 错误判断不要只比较 Error() 字符串。本文用最小示例拆开 fmt.Errorf 的 %w、errors.Join 的多分支包装和自定义 Is 方法,说明 errors.Is 什么时候能匹配、为什么 errors.Unwrap 对 Join 不够用,以及如何写出可回归的错误契约。407 收藏 -
Golang · Go问答 | 3星期前 | 并发 · 故障排查 · Go问答 · encoding/json · 配置中心 · sync/atomic · encoding/json atomic.Value Go配置热加载 Decoder 配置复用 旧值残留
Go 服务热加载 JSON 配置时,偶发读到旧值通常不是文件没有更新,而是解码目标被复用、缺失字段没有覆盖旧内容,或读写过程没有通过不可变快照切换。本文从一次线上故障切入,给出可复现证据、修复代码和回归检查。311 收藏 -
用户可控 URL 一旦进入 Go HTTP 客户端,字符串黑名单远远不够。本文从一次图片抓取接口的故障切入,拆解 scheme、端口、DNS 解析、私网地址和重定向的校验顺序,并给出可测试的最小实现边界。116 收藏 -
Golang · Go问答 | 4星期前 | WebAssembly · Go问答 · 前端交互 · 浏览器存储 · syscall/js · Go localStorage WebAssembly syscall/js js/wasm Wasm运行时脚本
Go 编译到浏览器 WebAssembly 后,可以通过 syscall/js 调用 localStorage。关键是使用 GOOS=js GOARCH=wasm 构建,保持 Wasm 运行时脚本与编译器大版本一致,把 JavaScript 调用收口并处理存储不可用、JSON 损坏和 MIME 类型错误。122 收藏 -
Golang · Go问答 | 4星期前 | 并发 · 单元测试 · go · Context · AfterFunc · Go问答 context.AfterFunc context.CancelFunc Go回调
Go 的 context.AfterFunc 适合在上下文取消后触发清理动作,但 Stop 返回 false 时回调可能已经开始或即将开始。本文用超时清理场景说明回调生命周期、竞态窗口、幂等保护和测试验收边界。258 收藏 -
Golang · Go问答 | 4星期前 | 标准库 · go · csv · 数据导入 · 错误定位 · Go encoding/csv FieldsPerRecord LazyQuotes ParseError
Go 导入 CSV 时,某一行多一个逗号就可能让整个读取流程报 ErrFieldCount。本文解释 FieldsPerRecord 的默认行为,给出允许可变列、保留原始行号和处理 LazyQuotes 的实战写法,避免把坏数据静默吞掉。224 收藏 -
用 Go strings.Cut 解析 key=value 配置行,区分分隔符缺失、空值和多余分隔符,比较 strings.Split 的误判与基准结果,给出可直接落地的解析边界。207 收藏 -
Golang · Go问答 | 4星期前 | HTTP · 流式处理 · Go问答 · encoding/json · 请求体 · Go DECODE eof 流式解析 json.Decoder JSON请求体
Go 用 json.Decoder 读取 HTTP 请求体时,第二次 Decode 得到 EOF 不一定是异常:它可能代表输入已正常读完,也可能是把单个 JSON 请求误当成了连续流。本文从单对象、尾随空白和多值 JSON 三种边界出发,给出最小判断、严格校验与可复查的读取流程。160 收藏 -
Go 1.25 将 testing/synctest 正式带入标准库,测试超时、定时器和并发协作时不必再真实等待。本文用一个带 deadline 的通知流程说明 synctest.Test、synctest.Wait、时间推进和版本兼容边界。107 收藏 -
Go 1.24 引入 runtime.AddCleanup 后,资源清理不必再把所有希望寄托在 SetFinalizer 上。本文从一个文件句柄包装器切入,解释 Cleanup.Stop、runtime.KeepAlive、回收时机和显式 Close 的边界,并给出可回归的迁移检查。454 收藏 -
Golang · Go问答 | 4星期前 | HTTP · IO · 流式处理 · Go问答 · 性能边界 · TeeReader · io.TeeReader io.Reader 请求体 日志审计 Go问答 流式复制
Go 的 io.TeeReader 会把每次读取到的字节同步写入另一个 Writer,适合做摘要、哈希和审计,但不等于后台复制。本文用请求体落盘场景拆开同步写入、写入错误传播、部分读取和失败清理边界,给出可验证的安全用法。289 收藏 -
Go 程序从一组参数扩展成 build、serve、migrate 等子命令后,直接共用 flag.CommandLine 很快会遇到参数串台、Usage 输出混乱和错误码不一致。本文用 flag.NewFlagSet 搭一个小型命令行入口,拆开 Parse、帮助输出和失败退出的边界。205 收藏