Go问答技术文章
-
WithoutCancel 会保留父上下文中的值,但主动切断父级取消、截止时间和错误传播,所以 Deadline 返回 ok=false。本文说明这一设计,并给出为后台任务重新设置独立超时的安全写法。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问答 | 3星期前 | 容器 · 性能排查 · 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 收藏 -
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问答 | 3星期前 | 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 收藏 -
Go 接口不等于 nil 时,问题通常不是 nil 比较失效,而是接口仍携带动态类型。本文用 typed nil、error 返回和类型断言示例,说明如何定位调用失败并修正返回边界。358 收藏 -
Go 没有 panicreturn 关键字,常见写法是用 defer 和 recover 捕获包内 panic,再改写命名返回值中的 error。本文用原创代码说明恢复边界、显式 return 和常见排查点。358 收藏 -
Go compress/flate 复用解压器时,Reset 会清理内部状态但不会清空调用方的输入和输出缓冲。本文用代码和边界清单定位上一段数据残留、输入游标错位、Close 缺失与字典不匹配。358 收藏 -
runtime/metrics 适合读取 Go 运行时定义的指标,expvar 适合发布应用自己维护的公开变量。本文用采样、名称兼容和版本边界说明两者怎么选。357 收藏