Go问答技术文章
-
Go 1.23 的 slices.Collect 能把迭代器收集成切片,但它不是零成本转换。本文从惰性生成、空序列、容量增长和大结果集几个边界入手,配合可运行代码说明什么时候适合收集,以及如何避免一次性占满内存。470 收藏 -
Go 里用 CmdContext 设置超时后,父命令返回并不等于整棵子进程树已经退出。本文用可复查的命令场景解释 context 取消、Wait 返回、子进程残留和回收验证之间的边界,给出带退出状态检查的处理方式。470 收藏 -
Go 1.25 为 go doc 增加 -http 选项,可以把指定对象的本地文档通过浏览器查看。本文用 net/http 演示启动方式、端口排查和文档范围判断。470 收藏 -
testing.T.Setenv 修改的是整个测试进程的环境变量,因此不能在并行测试或有并行祖先的测试中使用。本文说明冲突原因、串行拆分方式,以及如何用局部配置让并行子测试保持隔离。470 收藏 -
用最小示例解释 Go io.MultiWriter 遇到目标短写时为何返回 io.ErrShortWrite、停止后续写入,以及如何避免重试导致的数据错位。470 收藏 -
Go plugin 的 Lookup 找不到符号时,先区分插件打开失败与符号查询失败,再检查导出规则、名称拼写、构建方式和宿主插件的工具链一致性。470 收藏 -
Go database/sql 的连接等待不等于请求超时。本文用分阶段计时结合 DBStats 增量,区分获取连接与操作阶段失败,说明 MaxOpenConns、共享统计和上下文预算的判断边界。470 收藏 -
Go slog 不会自动把 context.Context 中的值写入日志。本文区分 Info 与 InfoContext、Logger.With 固定属性和自定义 Handler 读取上下文字段的边界,给出安全的排查与实现方式。470 收藏 -
解释 Go slog JSONHandler 遇到不可序列化值时为什么输出 !ERROR:json,并给出稳定摘要与 LogValuer 修正方式。470 收藏 -
Go 加上 -race 后变慢,主要来自访问插桩、同步关系跟踪和额外历史内存。本文说明如何固定 workload 比较性能,并用 GORACE 控制报告边界。469 收藏 -
Go 测试使用 t.Parallel 后,t.Setenv 修改的环境变量可能互相覆盖。本文解释两者的作用范围,给出参数化和串行边界两种稳定处理方式。469 收藏 -
Go compress/gzip 读取后 Header.Name 为空,不等于压缩数据明确记录了一个空文件名。本文从 FNAME 标志、Writer 写入条件和 Reader 解析行为说明如何区分可知信息与不可知信息,并给出稳妥的排障与设计方式。469 收藏 -
Go go-shp 中SHP与DBF按记录顺序对应,Shape返回的零基索引可直接用于ReadAttribute。本文演示关联读取,说明字段序号、筛选重排及配套文件混用的区别。469 收藏 -
Go 的 flag.FlagSet 适合把一个命令拆成互不干扰的子命令。本文从 serve 和 inspect 两个入口出发,说明参数归属、错误输出、帮助信息和兼容演进应该怎样划边界。468 收藏 -
Go defer 的函数参数在 defer 执行时就会求值保存,不是函数退出时才读取。本文用参数、闭包、LIFO 和命名返回值示例说明如何判断最终打印结果。468 收藏