Go语言技术文章
-
Go 服务部署到容器后,日志时间常常从本地时间变成 UTC。本文拆开 time.Time 的位置、time.LoadLocation 的加载方式和 JSON 序列化边界,给出一套可回归验证的处理方案。500 收藏 -
Go 中 bufio.Scanner 读取长日志时看起来只返回前一部分内容,通常是 token 超过默认缓冲上限后 Scan 停止。本文从 Err 检查、Buffer 配置、字节上限和 Reader 替代方案四个层面给出排查方法。499 收藏 -
Go encoding/json 默认会转义 JSON 字符串中的 HTML 特殊字符。本文用 Encoder.SetEscapeHTML(false) 对比 HTML 嵌入、API、日志和签名文本场景,说明关闭转义的正确边界。499 收藏 -
Go encoding/csv 中把 Reader.Comment 设为 0 就能关闭注释行过滤,让井号开头的文本回到普通 CSV 记录;文章同时说明首次读取前的配置时机、前导空白、Comma 冲突和格式错误边界。499 收藏 -
go.mod 的 replace 指向 ../local-module 时,开发机能编译并不代表发布环境也能找到该目录。本文从模块图和构建上下文解释失败原因,并给出 go.work、本地模块版本和发布前检查清单。499 收藏 -
解释 Go HTTP 客户端总超时与 Transport 阶段超时的覆盖范围,说明 DNS、TCP、TLS、响应头和响应体分别该由什么配置控制。499 收藏 -
Go 1.22 及以上可在 ServeMux 中注册命名通配符,并用 Request.PathValue 读取路径参数。本文区分单段参数与剩余路径,说明空值排查、转义边界和旧版兼容检查。499 收藏 -
用 fsnotify 监听配置文件时,连续 Write 事件并不等于连续修改。本文用一个可验证的去抖窗口合并写入抖动,再把稳定事件交给配置重载函数,并处理 Rename、Chmod 和 watcher.Errors 边界。499 收藏 -
Go 的 slice 传入函数时复制的是切片头,不是底层数组。本文用 append 和容量边界的具体例子解释为什么函数内部修改会影响调用方,并给出隔离数据、限制容量和复查别名的选择方法。499 收藏 -
Go 的 sync 包双返回值 Once 辅助函数不只是把初始化代码执行一次,还会把第一次返回的值和错误一起缓存。本文用并发初始化配置的场景说明它与普通 Once 的边界。499 收藏 -
Go testing.T.Cleanup 的关键不是把回调写在哪里,而是看它注册到哪个测试作用域以及登记顺序。本文解释同一 T 上的 LIFO 规则、父子测试边界、资源依赖登记方式和并发注册的排查方法。498 收藏 -
Go test 中 -count=1 会绕过成功测试缓存并实际执行一次;-count=0 则把普通测试、基准和 fuzz seed 的运行次数设为零,不能用来验证测试逻辑。本文对比两者与 (cached)、测试二进制、Examples 和 CI 排查的关系。498 收藏 -
Go slog.HandlerOptions.Level 是日志最低级别门槛。本文用 TextHandler 和 JSONHandler 说明如何过滤 Debug,如何用 LevelVar 动态打开调试日志,并排查默认 logger、独立 logger 与性能开关不生效的问题。498 收藏 -
Go 使用 bufio.Reader 逐行读取时,ReadString 和 ReadBytes 会保留换行分隔符;本文对比 ReadLine、Scanner,并给出正确处理 CRLF 与 EOF 最后一行的写法。498 收藏 -
Go 处理 gzip 时要同时限制压缩输入和解压输出。本文用 io.LimitReader(maxOutput+1) 识别超限,并说明多成员、EOF、校验和与资源释放边界。498 收藏