Go问答技术文章
-
slices.SortFunc 不会替你校验比较函数。违反严格弱序后,切片可能部分错序、结果随输入变化;本文给出 cmp.Compare、多字段排序、稳定性选择和性质测试方案。206 收藏 -
context.WithDeadlineCause 超时后,ctx.Err() 通常只返回 context deadline exceeded,具体原因要用 context.Cause(ctx) 读取;本文同时说明提前 cancel 和父上下文先取消时的边界。205 收藏 -
Go 并行子测试在旧循环语义下可能让多个闭包读取同一个最终循环项;Go 1.22 已改变按轮变量语义,但 slice、map、指针和外部资源仍可能共享。本文给出兼容写法、深复制与资源隔离方法。205 收藏 -
在 Go 的 PATCH 请求中,用 jsonnull 只包装需要区分缺失、JSON null 和空数组的字段,避免三态语义扩散到响应模型和数据库模型。204 收藏 -
atomic.Pointer 能让配置指针的替换具备原子性和同步关系,但不会让发布后的配置对象字段可以随意原地修改。本文用不可变快照、单次 Load、race 检查和回滚路径说明原子指针的可见性边界。204 收藏 -
从临时根路径、目录读写和资源清理三层排查 Go testing.T TempDir 的权限差异,覆盖 GOTMPDIR、Windows 文件占用、子进程等待与并行测试的兼容处理。203 收藏 -
Go 程序直接使用 net.LookupIP 的第一个结果时,IPv4/IPv6 顺序变化可能造成连接变慢或失败。本文区分解析结果、RFC 6724 地址排序和 Dialer Fast Fallback,给出双栈排查、限族连接与安全回归写法。203 收藏 -
ReadForm 的 maxMemory 主要约束文件内容,普通字段仍以字符串保存在内存。本文拆解其预算边界,并给出请求体、字段与临时文件的安全限制方法。202 收藏 -
Golang · Go问答 | 4天前 | golang · Context · 并发编程 · 超时控制 WithTimeout WithCancel Go context 取消传播 WithoutCancel
本文从停止权、时间预算和父级脱离三个维度比较 WithCancel、WithTimeout 与 WithoutCancel,解释父子取消传播、CancelFunc 回收、nil Done 风险,并给出请求后短任务的有界组合写法。202 收藏 -
Golang · Go问答 | 2天前 | 故障排查 · net/http · Go问答 · 反向代理 Sec-Fetch-Site Go CrossOriginProtection Origin Host 403误判
定位 Go CrossOriginProtection 在反向代理改写 Host、请求缺少 Sec-Fetch-Site 时的 403 误判,给出精确可信 Origin、Host 保留与安全测试方案。201 收藏 -
解释 go test 输出 (cached) 的原因,区分测试二进制、命令参数、环境变量和文件输入,并给出 -count=1、GODEBUG=gocachetest=1 与 go clean -testcache 的排查用法。200 收藏 -
Go 的 VerifyConnection 明确覆盖普通握手和恢复握手,用于保证自定义连接约束不会被会话恢复绕过。本文结合 DidResume、ClientSessionCache 与 HTTP 长连接复用说明调用边界和排查方法。200 收藏 -
本文给出 go.work 默认不入库、紧耦合单仓例外可入库的判断矩阵,并说明 go.work.sum、GOWORK=off、CI 双通道与变更权限如何约定。200 收藏 -
Go embedding 会把嵌入字段的部分方法提升到外层结构体,但值与指针接收者仍受方法集规则限制。本文用字段路径、同名冲突和接口赋值说明如何正确读取与转换。199 收藏 -
Go 的 QueryRow 不在调用处直接返回查询错误,真正的读取、类型转换和无行判断都要从 Scan 处理。本文用一个单行查询示例说明列映射、sql.ErrNoRows、NULL 字段和 QueryRowContext 的边界。199 收藏