Go语言技术文章
-
Go fuzzing 的种子语料既可以来自 f.Add,也可以来自 testdata/fuzz/FuzzTestName 目录。本文给出按 Fuzz 目标拆分目录、区分样本用途并纳入安全审计的组织方法。274 收藏 -
Go HTTP 客户端已复用 Client 与 Transport,连接数仍上涨时,应检查 Response.Body 是否读到 EOF 并关闭。本文给出小响应体、错误状态码和大响应体的处理策略,并说明 HTTP/1.x 连接复用的边界。326 收藏 -
从真实 time.Sleep 迁移到 Go testing/synctest:用 bubble、虚拟时间和 Wait 稳定并发测试,并梳理网络 I/O 与资源清理边界。252 收藏 -
testing/synctest 判断 channel 是否阻塞,关键不在于看到某个 goroutine 停住,而在于它是否只能被同一 bubble 内的事件唤醒。本文从 channel 来源、synctest.Wait 到 nil channel 和外部 I/O,整理一套可操作的判断方法。182 收藏 -
Golang · Go问答 | 1星期前 | HTTP · 故障排查 · net/http · Go问答 · 流式响应 · Go FLUSH ResponseController ResponseWriter 代理缓冲 HTTP流式响应
ResponseController.Flush 只负责把 Go 服务端当前可刷新的响应数据向下游推进,并不承诺浏览器或代理立即交付。本文从 ResponseWriter 包装、Flush 错误、响应格式和代理缓冲四条链路定位客户端无数据的原因。108 收藏 -
Go 的 http.Client 跨主机重定向后看不到 Authorization,通常是默认的敏感头保护。本文用 CheckRedirect、可信 Origin 和手动跟随策略,给出安全可控的处理方式。435 收藏 -
testing/synctest 用 bubble 隔离 goroutine,并把 time 包切换到虚拟时钟。本文从超时测试出发,说明 Test、Wait、资源清理和外部 I/O 的边界。165 收藏 -
atomic.Pointer 能让配置指针的替换具备原子性和同步关系,但不会让发布后的配置对象字段可以随意原地修改。本文用不可变快照、单次 Load、race 检查和回滚路径说明原子指针的可见性边界。204 收藏 -
testing.B.Loop 解决了串行基准的计时和编译器优化陷阱,但并行基准仍要通过 RunParallel 与 PB.Next 分配工作。本文拆开两种语义,说明如何读取 ns/op、b.N、GOMAXPROCS 和 SetParallelism。122 收藏 -
解释 Go 旧结构体中 64 位原子字段的对齐和复制边界,给出 atomic.Uint64 迁移、外部布局拆分、32 位构建与 go vet 复查方案。268 收藏 -
解释 Go 1.24 的 testing.B.Loop 如何自动划定基准计时边界,把初始化和清理排除在循环体耗时之外,并对比传统 b.N 写法的迁移注意事项。273 收藏 -
Go 并发代码里,原子计数器并不会自动保护同一结构体中的普通字段。本文从快照偶发不一致的故障现场出发,说明混用为什么仍会产生竞态,并给出全原子、互斥锁和原子快照的修复边界。360 收藏 -
Go 模糊测试默认会让多个 worker 并发调用 fuzz target,固定临时文件名因此可能被覆盖或提前删除。本文用 t.TempDir、os.CreateTemp 和目录注入给出可复现、可清理的修复方式。358 收藏 -
Golang · Go教程 | 1星期前 | 单元测试 · Context · Go教程 · HTTP客户端 · Go 上下文取消 HTTP测试 testing.T.Context http.NewRequestWithContext
Go 1.24 起,testing.T.Context 能把测试生命周期直接传给 HTTP 客户端请求。本文给出最小代码、超时收紧、子测试边界,并解释它与 httptest.NewRequestWithContext 的区别。413 收藏 -
Go fuzz 失败语料只有在环境可重建时才真正可复现。本文把 time.Now 与包级随机函数改成可注入时钟和局部随机源,并将时刻偏移、随机种子纳入语料。273 收藏