Go语言技术文章
-
slices.SortFunc 不会替你校验比较函数。违反严格弱序后,切片可能部分错序、结果随输入变化;本文给出 cmp.Compare、多字段排序、稳定性选择和性质测试方案。206 收藏 -
context.WithDeadlineCause 超时后,ctx.Err() 通常只返回 context deadline exceeded,具体原因要用 context.Cause(ctx) 读取;本文同时说明提前 cancel 和父上下文先取消时的边界。205 收藏 -
本文用 Go net/http ServeMux 组织方法、路径和命名通配符,说明路由优先级、PathValue 参数读取、冲突边界与旧版本兼容写法。205 收藏 -
Go 并行子测试在旧循环语义下可能让多个闭包读取同一个最终循环项;Go 1.22 已改变按轮变量语义,但 slice、map、指针和外部资源仍可能共享。本文给出兼容写法、深复制与资源隔离方法。205 收藏 -
在 Go 的 PATCH 请求中,用 jsonnull 只包装需要区分缺失、JSON null 和空数组的字段,避免三态语义扩散到响应模型和数据库模型。204 收藏 -
Go 的 url.Values.Encode 会按 key 排序并完成 URL 编码,但不会替你制定完整的签名协议。本文说明重复参数、特殊字符和签名字段如何纳入同一份规范化字符串。204 收藏 -
Go text/template 的 missingkey 不是统一的必选项:default 保留兼容行为,zero 返回元素类型零值,error 让 Execute 立即失败。本文按模板用途给出选择方法和落地清单。204 收藏 -
Go 批量任务如果靠定时轮询检查状态,既浪费唤醒次数又难以处理关闭流程。本文用 sync.Cond 把状态检查、等待和批量唤醒组织起来,并说明 Signal、Broadcast 与退出条件的选择。204 收藏 -
atomic.Pointer 能让配置指针的替换具备原子性和同步关系,但不会让发布后的配置对象字段可以随意原地修改。本文用不可变快照、单次 Load、race 检查和回滚路径说明原子指针的可见性边界。204 收藏 -
Go 的 encoding/csv 可以把引号字段里的换行当作字段内容,而不是新记录。本文用 Reader.Read、FieldsPerRecord 和 ParseError 处理多行字段,并区分 EOF、字段数不一致与引号语法错误。203 收藏 -
从临时根路径、目录读写和资源清理三层排查 Go testing.T TempDir 的权限差异,覆盖 GOTMPDIR、Windows 文件占用、子进程等待与并行测试的兼容处理。203 收藏 -
Go使用database/sql遍历Rows时,循环结束不代表读取完整。本文用一个列表函数说明如何同时处理Scan、Close和Rows.Err,避免把部分结果误当成成功响应。203 收藏 -
Go 程序直接使用 net.LookupIP 的第一个结果时,IPv4/IPv6 顺序变化可能造成连接变慢或失败。本文区分解析结果、RFC 6724 地址排序和 Dialer Fast Fallback,给出双栈排查、限族连接与安全回归写法。203 收藏 -
Go context.AfterFunc 适合在上下文取消时触发连接、临时文件等资源的兜底回收,但 stop 只解除回调关联,不等待回调结束。本文用 stop、完成信号和 sync.Once 拆解正常完成与取消竞态。202 收藏 -
用 Go log/slog 在请求边界派生带 request_id 的 logger,结合 With、WithGroup 和 LogAttrs 组织结构化字段,并说明 context、脱敏与并发复用边界。202 收藏