Go语言技术文章
-
netip.Prefix.Contains 判断网段时,结果异常通常不是位运算错了,而是 IPv4 与 IPv6 地址族、未规范化前缀或无效掩码混在了一起。本文用最小代码复现这些边界,并给出稳定的解析、规范化和测试方法。501 收藏 -
用 httptrace.ClientTrace 的 GotConnInfo 判断 Go HTTP 请求拿到的是新连接还是曾经使用过的连接,并区分 WasIdle、IdleTime 与请求体关闭时机。501 收藏 -
Go 1.22 引入的 base64.Encoding.AppendEncode 会把编码结果追加到已有 dst,而不是要求调用方先单独分配输出切片。本文用请求令牌拼接场景拆开 dst 前缀、EncodedLen 容量预估、append 扩容和输入边界,给出可核对的最小写法。501 收藏 -
用 Go log/slog 自定义 Handler,为健康检查、普通请求和故障请求设置不同日志门槛,同时保留 request_id 等关键上下文,避免线上日志降噪后失去排查线索。500 收藏 -
sync.Map.LoadAndDelete 返回的 value 可能是 nil,但 loaded 仍能准确区分键不存在与键存在。本文用最小可运行示例说明原子删除、nil 值和重复读取的边界。500 收藏 -
Go 的 sync 包双返回值 Once 辅助函数不只是把初始化代码执行一次,还会把第一次返回的值和错误一起缓存。本文用并发初始化配置的场景说明它与普通 Once 的边界。499 收藏 -
Go 的 slice 传入函数时复制的是切片头,不是底层数组。本文用 append 和容量边界的具体例子解释为什么函数内部修改会影响调用方,并给出隔离数据、限制容量和复查别名的选择方法。499 收藏 -
用 fsnotify 监听配置文件时,连续 Write 事件并不等于连续修改。本文用一个可验证的去抖窗口合并写入抖动,再把稳定事件交给配置重载函数,并处理 Rename、Chmod 和 watcher.Errors 边界。499 收藏 -
Go 的 sync.Map.Clear 可以一次清空映射中的全部条目,但它只适合明确的批量失效场景。通过并发读写示例、基线测量和结果核对,说明 Clear 的可见性、成本与替代方案。498 收藏 -
time.Ticker.Stop 只停止后续计时,不会关闭 ticker.C。本文用可复现的 Go 代码说明停止、退出和取消之间的边界,并给出不会卡住的定时任务收尾写法。498 收藏 -
Golang · Go问答 | 1天前 | 标准库 · go · Context · HTTP服务 · 连接管理 · Go net/http context 连接生命周期 Server.ConnContext
Server.ConnContext 只在新连接建立时修改连接级上下文,之后同一连接上的请求会继承它。本文用最小 HTTP 服务追踪 BaseContext、ConnContext、Handler 的调用顺序,并说明连接复用、HTTP/2 与清理逻辑的边界。498 收藏 -
用一个分页读取场景说明 Go 1.23 range over function 的提前停止语义,拆开 yield 返回 false、错误保存和调用方收尾之间的边界,给出可运行的 iter.Seq 示例与验收方法。497 收藏 -
用 Go 标准库 net/http 的 ResponseController.Flush 实现分段响应,结合 httptest 验证首段数据何时可读,并说明 ResponseWriter 包装、代理缓冲和错误处理边界。497 收藏 -
Golang · Go问答 | 2天前 | 标准库 · golang · Go问答 · 文件系统 · 路径安全 · Go fs.ValidPath io/fs.ValidPath 文件系统路径 路径清理
io/fs.ValidPath 接收的是文件系统内部路径,不是操作系统原生路径。本文从拒绝 .、.. 和斜杠的现象入手,拆开清理、校验与 Open 调用之间的边界。497 收藏 -
flag.FlagSet.Set 不只是在 Parse 之后补一个值:它会调用目标 flag 的 Value.Set,成功后把该参数记入 actual,重复赋值则按调用顺序覆盖。本文用子命令配置示例说明默认值、Set、Parse 与 ContinueOnError 的边界。497 收藏