Go语言技术文章
-
用 fsnotify 监听配置文件时,连续 Write 事件并不等于连续修改。本文用一个可验证的去抖窗口合并写入抖动,再把稳定事件交给配置重载函数,并处理 Rename、Chmod 和 watcher.Errors 边界。499 收藏 -
Go 的 slice 传入函数时复制的是切片头,不是底层数组。本文用 append 和容量边界的具体例子解释为什么函数内部修改会影响调用方,并给出隔离数据、限制容量和复查别名的选择方法。499 收藏 -
Go 的 sync 包双返回值 Once 辅助函数不只是把初始化代码执行一次,还会把第一次返回的值和错误一起缓存。本文用并发初始化配置的场景说明它与普通 Once 的边界。499 收藏 -
Go 流式处理最容易留下 goroutine 泄漏的地方,是只取消一端却没有唤醒另一端。本文用 context、io.Pipe、CloseWithError 和底层 ReadCloser 组合出一套双端退出方案。498 收藏 -
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 收藏 -
Go 1.27 为 QUIC 服务端握手增加 QUICConfig.ClientHelloInfoConn,用来指定 ClientHelloInfo.Conn 的底层连接。本文区分 TLS Conn、QUICConn 与底层 net.Conn,说明只读边界和回调取值方式。498 收藏 -
Server.ConnContext 只在新连接建立时修改连接级上下文,之后同一连接上的请求会继承它。本文用最小 HTTP 服务追踪 BaseContext、ConnContext、Handler 的调用顺序,并说明连接复用、HTTP/2 与清理逻辑的边界。498 收藏 -
time.Ticker.Stop 只停止后续计时,不会关闭 ticker.C。本文用可复现的 Go 代码说明停止、退出和取消之间的边界,并给出不会卡住的定时任务收尾写法。498 收藏 -
Go 的 sync.Map.Clear 可以一次清空映射中的全部条目,但它只适合明确的批量失效场景。通过并发读写示例、基线测量和结果核对,说明 Clear 的可见性、成本与替代方案。498 收藏 -
Go net/http 的请求体是一次性读取资源。Client.Do 会关闭请求体,关闭 TCP 连接也不会把 Body 重置;需要重试或重定向时,应保存原始数据、重新创建 Request,或确保 GetBody 能返回新的读取器。497 收藏 -
解释 Go testing.B.Loop 如何接管基准测试的迭代扩容、计时边界和防编译器消除职责,并说明 b.N 仍可在循环结束后用于自定义指标。497 收藏