Go问答技术文章
-
Go encoding/json/v2 的 MarshalFunc 不会全局注册。自定义格式化器不生效时,应依次检查 Go 版本与导入路径、WithMarshalers 是否传入同一次调用、泛型目标类型、JoinMarshalers 顺序和选项覆盖。260 收藏 -
Go pprof.StartCPUProfile 如果停止太晚,会把无关阶段纳入采样窗口,并让结束时的 profile 写入等待变长。本文用明确的开始、停止和关闭顺序说明如何控制 CPU 剖面范围。259 收藏 -
Go embed 使用目录模式时会默认跳过名称以点号或下划线开头的文件。本文对比 assets、assets/* 与 all:assets 的匹配边界,并给出 embed.FS 读取、构建检查和安全排查方法。259 收藏 -
Go io/fs返回的错误通常带有PathError上下文,使用errors.Is区分文件不存在、权限拒绝和非法路径,再把每类错误映射到明确的业务动作。259 收藏 -
context.AfterFunc 返回的 stop 只在回调尚未启动时阻止它;取消与停止存在竞态,stop 返回 false 时回调可能已在独立 goroutine 中运行。本文给出等待完成、幂等清理和审计检查方案。259 收藏 -
解释 Go cmp.Compare 遇到 NaN 时的返回规则:NaN 小于任意非 NaN、NaN 与 NaN 相等、负零与正零相等,并给出默认排序及 NaN 靠后的定制写法。258 收藏 -
unique.Make 设计上不会永久保留所有失去 Handle 的规范值,但活跃 Handle 会延长生命周期,高基数长期服务还要关注弱引用清理时机与 Go 官方已知问题。本文给出适用边界、代码和监控建议。257 收藏 -
梳理 Go net/http 的 HTTP/1、TLS HTTP/2 与明文 HTTP/2 配置差异,给出客户端、服务端匹配方式和连接失败排查清单。257 收藏 -
go.work 与 replace 在 CI 中出错,通常要先确认工作区是否生效,再核对相对路径、module 声明和 require 关系,最后比较代理与私有模块环境。256 收藏 -
t.Parallel 不是把子测试函数立即丢到后台执行,而是在调用点暂停,等父测试函数返回后再进入并行阶段。理解这个边界,才能正确处理循环变量、共享资源和测试并发上限。256 收藏 -
Go HTTP 请求重试不要一股脑塞进 Transport:网络级可重放失败适合统一处理,创建和写入接口必须由业务层配合幂等键、结果查询与退避策略,才能避免超时后的重复写入。255 收藏 -
讲清 Go database/sql Rows 读取 SQL NULL 的正确方式:用 NullString、NullInt64 或 sql.Null[T] 接住空值,结合 Valid 判断、Rows.Err 和 Close 保留完整数据语义。254 收藏 -
Go 的 T 与 *T 方法集并不相同。本文用接口赋值、可寻址变量和方法表达式拆开指针方法的调用与转换边界,帮你定位 method has pointer receiver 编译错误。253 收藏 -
Go 的 initorder 是编译器内部的初始化依赖分析,不是应用层排序 API。本文用显式包级依赖、单一初始化器和 init 边界说明如何稳定表达初始化顺序。253 收藏 -
围绕 Go archive/tar 的 Header.Name 讲清普通相对路径、父目录跳转、tar.ErrInsecurePath、链接条目和固定解压根目录的安全判断方法。253 收藏