Go语言技术文章
-
本文说明 Go encoding/base32 的 CorruptInputError 如何表示首个非法输入字节偏移,并用 errors.As、UTF-8 位置换算、上下文切片和 padding 配置完成可读诊断。259 收藏 -
Golang · Go问答 | 2个月前 | HTTP · net/http · Go问答 · Go WriteHeader ResponseWriter HTTP 状态码 superfluous response.WriteHeader
Go 服务日志出现 superfluous response.WriteHeader,通常不是框架故障,而是同一个请求路径已经写出最终状态码,后续分支又继续写了一次。文章用一个订单创建接口复现问题,解释 Write 与 WriteHeader 的先后边界,并给出 return 收口、响应助手分层和 httptest 回归检查的最小修复方案。258 收藏 -
Go 的 context.AfterFunc 适合在上下文取消后触发清理动作,但 Stop 返回 false 时回调可能已经开始或即将开始。本文用超时清理场景说明回调生命周期、竞态窗口、幂等保护和测试验收边界。258 收藏 -
Go 的 atomic.Int64 不能在首次使用后复制。本文从 noCopy 约束、指针接收者和结构体字段设计出发,给出并发计数的安全写法与检查方法。258 收藏 -
通过 go mod vendor 生成 vendor 与 vendor/modules.txt,在断网构建机用 GOPROXY=off 和 -mod=vendor 完成 Go 项目的离线构建,并处理 go.mod 与 vendor 不一致问题。258 收藏 -
database/sql.QueryContext 返回的 Rows 可能仍占用驱动连接。本文用可复用的 Go 代码说明为什么要 Close、何时检查 Rows.Err,以及查询提前退出时如何避免连接池被拖住。258 收藏 -
Go bufio.Reader 的 ReadString 和 ReadBytes 都能按分隔符读取一行,但返回类型、数据转换和末尾 io.EOF 的处理不同。本文用示例说明两者怎么选。258 收藏 -
用 Go modules replace 在不改 import 路径的前提下临时指向本地模块,说明 require、go.mod、go list -m -json 与提交前清理之间的排查关系。258 收藏 -
解释 Go cmp.Compare 遇到 NaN 时的返回规则:NaN 小于任意非 NaN、NaN 与 NaN 相等、负零与正零相等,并给出默认排序及 NaN 靠后的定制写法。258 收藏 -
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏 -
用 Go 的 atomic.Bool 实现并发开关,掌握 Load、Store、Swap、CompareAndSwap 的选择,以及原子状态与配置可见性的边界。257 收藏 -
Go 切片别名共享底层数组时,append 可能覆盖另一份切片可见的数据。本文用 full slice expression 的第三个下标限制容量,并说明它对直接写入和其他别名的保护边界。257 收藏 -
用一个临时日志缓冲区示例,说明 sync.Pool 如何在 Get 后初始化、Put 前清理,避免高并发复用对象时泄露上一次请求的脏状态。257 收藏 -
本文讲解如何处理 JSON 响应中首个元素为数字、后续元素为对象的混合类型数组,通过 []interface{} 动态解析 + 类型断言与二次反序列化,安全提取结构化数据。 本文讲解如何处理 JSON 响应中首个元素为数字、后续元素为对象的混合类型数组,通过 []interface{} 动态解析 +256 收藏 -
用 Go 1.24+ 的 os.OpenInRoot 和 os.Root 将文件打开限制在指定目录内,理解相对路径、符号链接、错误边界与旧代码迁移方式。256 收藏