Go教程技术文章
-
用 testing.TB.Context 把测试生命周期传给子协程,处理取消时机、Cleanup 顺序和 goroutine 退出验收,避免测试结束后仍有后台工作。407 收藏 -
上传图片时先用 Go image.DecodeConfig 读取宽高和格式,再决定是否进入完整解码,减少大文件校验阶段的内存压力。223 收藏 -
Golang · Go教程 | 3天前 | golang · 服务端 · 故障排查 · net/http · 连接泄漏 StateIdle ConnState Go net/http StateHijacked
Go net/http 的 ConnState 能记录连接从新建、活跃、空闲到关闭的状态变化,但它不是按请求计数的万能监控器。本文用一个连接数持续上涨的场景,建立状态计数、识别 Hijacked 长尾,并用复现和回收检查确认问题是否真正消失。311 收藏 -
Go sync.Cond 的关键不是把 Signal 换成 Broadcast,而是让等待条件、互斥锁和唤醒范围保持一致。本文从有界队列场景出发,拆解 Wait 的循环写法、Signal 与 Broadcast 的选择、丢唤醒风险和可验证的测试边界。104 收藏 -
Go 测试里 t.Setenv 会注册环境变量清理动作,但它不能与 t.Parallel 放在同一测试流程中。本文用最小示例说明限制原因、子测试边界和稳定的隔离写法。429 收藏 -
Go 的 os.File.Sync 不是每次写文件都要调用的性能开关,而是把关键写入推进到存储设备可恢复边界的明确步骤。本文用临时文件、文件同步、原子替换和目录同步拆开它的适用场景、错误处理与验收方法。300 收藏 -
sync.Map.Range 适合做并发遍历,但不能当作一致性快照。本文用一个在线会话统计场景拆开 Range 的遍历语义、并发写入影响、O(N) 成本,并给出快照统计与可控停止的实现边界。298 收藏 -
用 Go runtime/trace 的 Task、Log 和 Region 标记一次异步请求,把采集、查看与代码验证串起来,帮助定位跨 goroutine 的阶段耗时和事件顺序。244 收藏 -
context.AfterFunc 的停止函数只负责阻止尚未开始的回调;一旦回调已经启动,调用 Stop 不会等待它结束。本文用可复现代码拆开停止竞态、资源释放和幂等收尾。332 收藏 -
当 errors.Is 判断包装错误失效时,先区分单链 Unwrap 与 errors.Join 的多链展开,再用可复现代码检查哨兵错误是否仍在错误树中。本文从一个接口报错现场出发,给出定位、修复和边界验证方法。275 收藏 -
json.Decoder.Decode 成功一次,不代表请求体只包含一个 JSON 文档。本文用 Token、第二次 Decode 和 io.EOF 判定尾随数据,拆解单文档接口的校验边界与常见误区。494 收藏 -
io/fs.ValidPath 专门判断文件系统接口使用的相对路径是否合规。本文从点号、斜杠、空路径和归档条目四个边界入手,给出可运行的校验代码以及如何避免把合法嵌套路径误判成危险输入。408 收藏 -
Go 的 html/template.ParseFS 可以直接从 embed.FS 加载模板,但嵌入路径、模板匹配和执行错误各有边界。本文用一个可运行的页面渲染例子拆开加载、执行、错误定位与发布验收。417 收藏 -
Go 的 os.ReadDir 返回 DirEntry,不必立刻为每个目录项读取完整 FileInfo。本文拆开 Type、IsDir、Info 的成本和错误边界,说明排序语义、符号链接判断以及适合目录扫描的最小写法。325 收藏 -
Go 标准库 flag 默认把一个参数当成一个值。本文用自定义 flag.Value 收集重复参数,说明切片初始化、空值校验、错误提示和最终读取的边界。259 收藏