Go问答技术文章
-
Go 用较短内容覆盖旧文件时不会自动删除尾部字节,使用 os.File.Truncate 按新长度截断,并注意文件偏移、写权限和并发边界。314 收藏 -
Go html/template 解析多个文件或 define 命名模板后,可以用 Templates 遍历关联模板并读取 Name,再用 Lookup 检查某个名称是否存在。本文给出最小示例,并说明 ParseFiles 根名称、命名模板和 ExecuteTemplate 参数不一致时的排查顺序。122 收藏 -
用 Go netip.ParseAddr 解析带接口作用域的 IPv6 地址,读取 Addr.Zone,并掌握 WithZone、As16 与 Prefix.Contains 的边界。363 收藏 -
strconv.Unquote 解析配置值失败,通常不是反斜杠本身不能出现,而是输入没有遵守 Go 字符串字面量的引号和转义规则。本文用路径配置拆开缺少引号、未知转义和重复转义三种情况,并给出统一处理与 Quote 配对的写法。203 收藏 -
以Linux交叉构建为范围,区分目标架构与链接方式,介绍关闭cgo和保留目标C工具链两条路线,并说明动态加载器、共享库及运行镜像迁移条件。397 收藏 -
Go 表驱动测试调用 t.Parallel 后,子测试可能在外层循环继续修改变量时才真正执行。本文从调度语义、Go 1.22 循环变量规则和指针切片共享边界说明原因,并给出兼容旧模块的修复写法。459 收藏 -
Go race 没有报告某次数据竞争,并不等于代码绝对安全。本文从运行路径、并发时序、race 构建和 !race 文件四个方面拆解漏报原因,并给出一份可复查的测试覆盖清单。488 收藏 -
区分f.Add种子、testdata文件语料与fuzz探索缓存,说明目标目录、包路径、单样本过滤及输入类型匹配,并用边界错误示例解释如何建立稳定回归。487 收藏 -
解释 Go slog JSONHandler 的 JSON 字段顺序为何不能当作契约,并给出按键解析、稳定测试和固定文本格式化方案。124 收藏 -
Go pprof 看不到短生命周期函数,通常不是函数被忽略,而是 CPU profile 按固定采样点记录调用栈,短调用可能没有撞上采样点,或累计 CPU 占比太低。本文用对照示例说明如何延长采样窗口、读取聚合结果并排除误判。447 收藏 -
Go 的 log.Fatal 会先输出日志,再调用 os.Exit(1)。os.Exit 立即结束进程,不执行当前调用链中的 defer,因此清理逻辑会被跳过。本文拆开调用关系,并给出把错误返回到 main、让资源先完成 defer 的写法。263 收藏 -
Go errors.As 返回 false 时,先看错误实现的 Error 接收者和实际动态类型,再决定目标变量是 *T 还是 T。本文用一个小型校验错误示例说明指针错误、值错误、%w 包装和常见声明误区。483 收藏 -
crypto/rand.Text 返回的不是任意字母数字串,而是基于 RFC 4648 Base32 的密码学安全文本。本文从官方实现拆开字符集合、长度与自定义字符表的边界。329 收藏 -
Go 的 recover 只能处理当前 goroutine 正在展开的 panic,父 goroutine 的 defer 无法跨线程接住子 goroutine 的异常。本文拆解正确的入口包装、结果回传和失败处理方式。294 收藏 -
Go RWMutex 并不是让新读者无限插队:写者一旦等待,新的 RLock 会被挡住。写锁仍然长期等待时,优先检查已经持有的读锁、RUnlock 配对、递归读锁、其他写者排队和写临界区长度。125 收藏