Go语言技术文章
-
Go 的 nil 指针接收者不一定一调用就 panic:方法可以先进入方法体,但字段解引用、值接收者和 nil 接口会形成不同边界。本文用最小示例拆开这些情况,并给出排查清单。179 收藏 -
多个 Go 进程追加写同一个日志文件时,不要先 Seek 再 Write。本文从零实现一个 appendlog 小工具,讲清 O_APPEND 的正确用法、单次写入边界、关闭错误,以及什么时候必须增加锁或外部队列。179 收藏 -
sync.OnceValue 和 sync.OnceValues 只负责一次性初始化,不会把返回 error 当成自动重试信号。本文用最小示例说明错误缓存语义,并给出只缓存成功值的显式重试写法。179 收藏 -
从请求入口创建截止时间,沿 Go context 调用链传给服务层和下游阻塞操作,并说明局部子预算、取消传播、Err 判断与资源释放的实现边界。179 收藏 -
用 Go bytes.Reader 保存绝对偏移、回退试读分支,并区分 Seek 越界、负位置、EOF 与 ReadAt 独立探测。179 收藏 -
Go json/v2 迁移的难点不在替换 import,而在字段名匹配、omitempty、nil 集合和未知成员等行为差异。用清单和 DefaultOptionsV1 可以分阶段切换。179 收藏 -
Go 的 http.Response.Body 是流式网络资源,调用方必须关闭。对 HTTP/1.x 而言,读到 EOF 再关闭更有利于连接复用;但大响应应有限排空或直接终止,不能为了复用盲目读取。179 收藏 -
解释 Go sync.Pool 的临时对象复用边界,说明 GC 为什么可以清空池、为什么不能拿它保存业务数据,并给出清理与并发核对方法。178 收藏 -
用 Go 标准库 log/slog 为请求日志绑定稳定的组级属性,比较 With 与 WithGroup 的差异,并通过并发测试确认字段不会串请求。178 收藏 -
Go 1.21 给 bytes.Buffer 增加 Available 和 AvailableBuffer 后,如何判断可写余量、避免误解短写,并用 Cap 和 Len 验证扩容结果。178 收藏 -
go test -coverprofile 默认只分析正在测试的包。要把模块内子包纳入同一份报告,需要同时指定测试包列表和 -coverpkg=./...,再用 go tool cover 查看函数或 HTML 报告。178 收藏 -
用 Go os.File.ReadAt 按偏移并发读取文件,讲清分片边界、并发限制、短读与 EOF 处理,以及它和 Read、Seek 的取舍。178 收藏 -
用 Go 的 io.SectionReader 从 ReaderAt 数据源中限制固定起点和长度,说明 Read、ReadAt、Seek、Size、Outer 的偏移口径、EOF 边界以及字节切片的常见坑。178 收藏 -
通过实现限速 Reader 接入 io.Copy,控制文件传输的读取节奏,同时保留 EOF、底层错误、关闭责任和取消边界。178 收藏 -
用 Go compress/flate 的 NewReaderDict 配合同一份预置字典解压 DEFLATE 数据,示范 io.Copy、Close、Reset 的写法,并按字典、输入流和读取边界排查失败原因。178 收藏