Go问答技术文章
-
Go os.Lstat 升级后结果不同时,先固定输入与运行环境,再对照真实构建版本。通过原创只读探针、字段比较和环境矩阵,定位工具链、部署条件或应用展示层的差异。361 收藏 -
Go 的 net/netip 用 Prefix 表示网段,ParsePrefix 负责解析输入,Masked 负责得到规范化网络地址,Contains 才负责判断地址归属。本文用 IPv4、IPv6 和非规范输入拆开 Bits、Masked 与 Contains 的边界。360 收藏 -
用 Go 的 net/http ServeContent 提供可断点读取的文件响应,重点看 Range、Content-Range、io.ReadSeeker 和条件请求之间的边界,避免手写文件分片时遗漏偏移与缓存处理。360 收藏 -
Go 的 xmlattr 本质上是 encoding/xml 结构体标签里的 attr 选项。属性读不到或输出名称不对时,应依次核对属性名、字段可导出性、XMLName 和命名空间,再用 Marshal/Unmarshal 双向验证。360 收藏 -
Golang · Go问答 | 1个月前 | 容器 · 性能排查 · Go问答 · 运行时 · go GOMAXPROCS 容器 CPU 配额 runtime.NumCPU cgroup cpu.max Kubernetes CPU limit
Go 容器里的 GOMAXPROCS 不一定等于宿主机 CPU 数。本文从 CPU limit、CPU request 和运行时实际值入手,给出 Go 进程内与 cgroup 两侧的观察方法,并说明 Go 1.25+ 的自动默认、手动覆盖和复查边界。360 收藏 -
解释 Go database/sql 中 Commit 成功后 defer Rollback 返回 sql.ErrTxDone 的原因,并给出区分业务错误、提交错误和正常清理结果的事务封装。360 收藏 -
Go 并发代码里,原子计数器并不会自动保护同一结构体中的普通字段。本文从快照偶发不一致的故障现场出发,说明混用为什么仍会产生竞态,并给出全原子、互斥锁和原子快照的修复边界。360 收藏 -
Go sync.RWMutex.TryLock 会尝试获得写锁并立即返回结果。本文用缓存刷新场景说明它与 Lock 的阻塞差异、成功后的 Unlock 责任,以及何时可以跳过一次写入、何时必须排队完成。360 收藏 -
Go 里把已经编码的参数再次交给 QueryEscape,常会出现 %25、%2B 等二次编码结果。本文用一个小型 URL 构造器区分查询参数、路径段和 URL 字段,给出稳定的排查与修复写法。360 收藏 -
slog.LogValuer 适合把昂贵或需要脱敏的日志值延迟到 Handler 真正处理时再计算,但它不是所有日志字段的默认包装。本文用 LogAttrs、Handler.Enabled 和 LogValue 的真实调用链说明何时值得使用,以及递归解析和敏感字段的边界。359 收藏 -
Go 中重复关闭 channel 会触发 panic,向已关闭 channel 发送也会 panic,而从已关闭 channel 接收会返回零值。本文用状态表、单一关闭者、多生产者协调和 done 广播说明如何修复。359 收藏 -
go test -race 输出的 goroutine 栈不是一条普通调用链。本文按冲突访问栈、goroutine 创建栈和共享数据位置拆解报告,说明如何从函数名与行号回到真正的读写代码,并完成修复复查。359 收藏 -
解释 Go defer 调用方法时接收者和参数的求值时机,比较值接收者、指针接收者与闭包写法,帮助排查为什么延迟日志读到旧值。359 收藏 -
Golang · Go问答 | 1个月前 | database/sql · Go database/sql Rows Go Rows Scan字段顺序 Go SQL查询列顺序 Go rows.Columns排查 Go rows.Err错误处理
Go database/sql 使用 Rows 时,Scan 的目标参数必须按 SELECT 返回列的顺序排列。本文从列数、列名、类型和 NULL 四个方向排查错位,并补上 Rows 的 Close 与 Err 收尾检查。359 收藏 -
Ristretto 的 MaxCost 只定义成本上限,新条目仍可能在 Set 缓冲或 TinyLFU admission 阶段被丢弃。本文用 Wait 和 Metrics 区分异步可见性、缓冲丢弃与准入拒绝,并给出调用策略。359 收藏