Go问答技术文章
-
flag.VisitAll 遍历的是 FlagSet 中已定义的全部参数,而 flag.Visit 只遍历本次 Parse 或 Set 后进入 actual 的参数。本文用一个命令行配置示例拆开两者边界,说明默认值、重复赋值和未解析参数该怎么排查。393 收藏 -
Go 的 log/slog 用 WithGroup 给字段划分命名空间,但 With、WithGroup 和单次 LogAttrs 的先后顺序会影响最终结构。本文用一个请求日志例子说明字段如何继承、重复键如何处理,以及自定义 Handler 应该怎样保持同样的语义。391 收藏 -
解释 Go context 取消后 goroutine 仍可能继续工作的原因,给出 select 监听、资源释放、退出确认和可复现检查方法。389 收藏 -
Golang · Go问答 | 1天前 | 标准库 · go · 并发控制 · 故障排查 · 进程管理 · Go 外部命令 子进程 Cmd.WaitDelay CommandContext ErrWaitDelay
Go 程序调用外部命令时,子进程退出了但管道迟迟不关闭,Cmd.WaitDelay 如何限定等待边界?本文用 CommandContext、WaitDelay 和 ErrWaitDelay 拆开判断与收尾方式。387 收藏 -
Go 的 regexp.MatchString 适合快速判断,但把 regexp.Compile 放进热循环会反复解析模式。本文对比一次编译、MustCompile、动态模式和并发复用的边界,给出可运行的性能与输入验收方法。382 收藏 -
通过 Go 的 os.LookupEnv 与 os.Getenv 示例,说明空字符串和未设置的区别,并给出配置回退、必填校验与测试隔离的实用写法。381 收藏 -
Go 1.24 新增 testing.B.Loop。本文用一个可运行的基准测试说明它和 b.N 写法的区别、计时边界、编译器保活语义,以及升级后如何核对结果。381 收藏 -
Go 1.24 的 os.OpenInRoot 如何安全打开不可信文件名?本文用目录逃逸、符号链接和错误分支说明 Root 的边界,并给出可核对的最小代码。381 收藏 -
Go 用 encoding/json 将 JSON 解码到 interface{} 或 map[string]any 时,数字默认会落成 float64。本文用订单金额和分页字段的例子说明这种行为的原因,演示 Decoder.UseNumber、json.Number 与结构体解码的选择,并给出精度验证与边界检查方法。380 收藏 -
atomic.Uint64 适合维护并发计数,但一个已经使用过的值不能再通过复制传递。本文用请求计数器拆开 Add、Load、Store 和复制副本的边界,说明为什么会触发 go vet 警告,以及如何安全地初始化、读取和测试。379 收藏 -
Golang · Go问答 | 4天前 | 切片 · 并发安全 · golang · Go问答 · slices.Clone · 底层数组 并发修改 Go slices.Clone Go切片 切片容量
slices.Clone 能复制 Go 切片,但它解决的是底层数组共享,不等于深拷贝或并发安全。本文用容量边界、append 行为和嵌套引用三个检查点说明该怎么选。371 收藏 -
Go 的 map 不能用 == 比较内容,只有和 nil 比较才合法。本文从可比较类型规则出发,拆解 len、reflect.DeepEqual 与排序后序列化三种校验方式的边界,并给出测试和生产代码中的选择建议。369 收藏 -
io.NewOffsetWriter 可以把顺序写入映射到一个带起始偏移的区域,但它不会替底层 WriterAt 修复短写,也不会把 Seek 的定位语义变成并发安全。本文用可复现的内存示例拆开偏移、短写和错误传播边界。369 收藏 -
encoding/csv.Reader 遇到列数不固定的 CSV 时,应把 FieldsPerRecord 设为负数关闭列数校验,再在业务层按字段长度和列名做校验。本文比较 0、正数和负数三种设置,给出可复现的读取与验收方法。367 收藏 -
解释 bytes.Buffer 的 Available、Len、Cap 与 Grow 如何配合,给出可验证的追加空间判断,以及 AvailableBuffer 的使用边界。365 收藏