Go语言技术文章
-
Go token.File.SetLines 返回 false,通常是因为行偏移没有严格递增,或某个偏移已经达到文件大小。本文从换行边界、空文件和自定义行表三个角度说明如何构造有效数据。127 收藏 -
Go 的 encoding/csv 负责解析记录和字段,不会自动识别 GBK 或 GB18030。本文从 UTF-8、GBK 解码边界出发,说明中文 CSV 出现乱码的原因与可直接复用的修正写法。126 收藏 -
围绕 Go 1.25 的 testing.T.Attr,说明测试属性的键值约束、无序日志语义、go test -json 的 attr 事件字段,以及旧版本和 CI 解析器的兼容处理。126 收藏 -
Go race 主要观察单个进程内 goroutine 对共享内存的并发访问。本文解释跨进程文件、IPC 和数据库问题为什么不会自动产生 race 报告,并给出按共享媒介分层排查的方法。126 收藏 -
io.LimitReader 遇到读取上限只会表现为 EOF,不能直接说明源数据是否超限。本文用多读一个哨兵字节和流式复制两种方式,区分完整、恰好到达上限与真正截断。126 收藏 -
Go http.Server.Shutdown 一直等待时,不要先改成 Close。先用 ConnState 找到仍在处理请求的连接,再给 Shutdown 加超时,并单独处理 WebSocket 等 hijacked 连接。126 收藏 -
用 Go Flock 区分 RLock/TryRLock 与 Lock/TryLock 的适用范围,覆盖只读快照、文件更新、非阻塞降级以及共享锁升级的跨平台风险。126 收藏 -
Decoder 不负责关闭底层 Reader。通过文件与响应体的所有权、单文件函数和长期引用,区分句柄泄漏、缓冲保留与业务结果增长,并给出读取示例和指标比较方法。126 收藏 -
连续调用 slices.Delete 时不要继续照搬旧下标。本文用反向删除和区间合并两种方案处理索引偏移,并说明边界检查、排序与容量复用的注意点。126 收藏 -
Go scanner.Scanner 本身没有 Filename 字段,词法错误中的文件名来自 Scanner.Init 使用的 token.File。本文说明如何用 FileSet.AddFile 设置逻辑源文件名,并通过 ErrorHandler 或 ErrorList 输出带文件名、行号和列号的诊断。126 收藏 -
Go encoding/json/v2 默认拒绝重复成员名,可用 AllowDuplicateNames 明确严格或兼容策略。示例说明对象入口、空输入处理、局部结果隔离及旧数据导入边界。126 收藏 -
Cobra 的 Flags 只服务当前命令,PersistentFlags 会沿命令树传给后代。本文用参数作用域、命令继承和覆盖风险说明两者的选择。126 收藏 -
Go HTTP 客户端拿到响应后,Body 的读取程度和关闭时机都会影响连接复用。本文按完整读取、只看状态码和有限排空三种场景说明如何选择,让 defer、读取上限与 HTTP/1 复用策略各司其职。125 收藏 -
把 Go 结构化输出测试从脆弱的长字符串断言迁移到 golden 文件:先稳定序列化,再用 -update 显式更新基线,最后输出可审阅的差异,避免测试被悄悄改绿。125 收藏 -
Go net/http.Header.WriteSubset 可以按排除表把请求头写成线格式,但排除键不会自动规范化。本文用一个转发场景讲清 Header map、排除表、Request.Host 与写出错误的边界。125 收藏