Go语言技术文章
-
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
Go 的 os.ReadFile 会一次性把文件内容放进 []byte,适合小配置和短文本,不适合把大文件直接装进内存。本文用文件大小、读取方式和错误处理三个维度拆解内存暴涨原因,并给出 bufio.Reader、io.Copy 和分块处理的选择边界。220 收藏 -
Go 服务读取 HTTP 响应时,io.ReadAll 会把内容一次性放进内存。本文用 io.LimitReader 和 http.MaxBytesReader 拆开客户端、服务端的上限策略,并说明如何区分截断与真实读取错误。220 收藏 -
用 go:generate 固定生成入口,在 go build 前检查生成结果与源定义是否同步,覆盖命令边界、差异检查、工具依赖和提交策略。220 收藏 -
演示如何用 Writer.RegisterCompressor 为指定 ZIP 方法注册压缩器,并说明 Method 选择、Close 刷新、并发安全、读取兼容性和性能衡量方法。220 收藏 -
用 Go embed.FS 把静态目录编译进程序,掌握 //go:embed 的路径模式、包边界、隐藏文件规则,以及接入 HTTP 和模板解析时的目录约定。220 收藏 -
解释 Go sql.DB.Stats 中 WaitCount 持续增长的含义,区分连接池等待、数据库变慢和资源未释放,并给出窗口采样与参数排查方法。220 收藏 -
用 Go http.ServeContent 提供音视频或大文件时,Range 请求返回 416 往往不是客户端故障,而是 Seek、文件大小和请求区间没有对上。本文用可复现的检查路径拆开 206 与 416 的边界。219 收藏 -
Go benchmark 统计内存分配次数,最直接的方法是 go test -benchmem 或 b.ReportAllocs();需要代码读取时再使用 BenchmarkResult.AllocsPerOp 或 AllocsPerRun。219 收藏 -
Go 处理 IPv6 host:port 时不能直接按冒号拆分,本文用 net.SplitHostPort 和 net.JoinHostPort 说明方括号、zone、端口边界及异常输入处理。219 收藏 -
用 time.NewTimer 和单 goroutine 事件循环实现可重置的空闲超时,讲清 Reset 前排空、Go 1.23 语义变化,以及 time.After、AfterFunc 的选择边界。219 收藏 -
Go io.ReadFull 读取固定长度消息时,只有 n 等于缓冲区长度且 err 为 nil 才算成功;本文区分 io.EOF、io.ErrUnexpectedEOF 与其他 Reader 错误,并给出安全的读取循环写法。219 收藏 -
Go 的 regexp.Split 遇到空匹配时,结果取决于匹配区间、相邻空匹配抑制规则和 n 参数。本文用索引和小例子说明如何判断。219 收藏 -
Go 的 http.ServeContent 不会替你决定 Cache-Control;应在调用前设置缓存策略,并配合 modtime 或 ETag 处理条件请求。本文用一个文件接口讲清响应头的职责、设置时机与常见边界。219 收藏 -
使用 httptest.ResponseRecorder 测试 Go HTTP handler 时,Code 可能因 recorder 的创建方式和写入时机呈现不同结果。本文用最小示例解释 Code、Result().StatusCode、Header 与 Body 的读取边界,并给出稳定的排查清单。219 收藏