-
runtime.NumGoroutine 返回的是调用时刻仍存在的 goroutine 数量,不是累计创建数。本文说明读数下降的正常原因,并用连续采样与 goroutine profile 区分短时波动和持续堆积。
-
Go 的 net/mail.AddressParser.ParseList 可以把逗号分隔的邮箱地址解析为 []*mail.Address。本文说明普通地址、显示名、带引号逗号和解析错误的处理边界,并比较它与 Header.AddressList 的使用场景。
-
context.Cause 返回的 error 不能只靠字符串判断。本文从取消信号的生命周期出发,说明如何用 ctx.Err() 判断标准状态,用 errors.Is 和 errors.As 判断自定义原因,并区分主动取消、超时和父级传播。
-
用 Go 1.24 的 os.OpenRoot 固定文件访问根目录,再结合 bufio.Reader.Peek 查看文件头而不推进读取位置;文章同时说明短文件、缓冲区大小、越界路径和符号链接边界的处理方式。
-
Go reflect.Value.MethodByName 找不到方法时会返回零 Value,不能直接 Call。本文说明 IsValid 判断、导出方法与大小写、值接收者和指针接收者差异,以及反射调用前的签名检查。
-
Go 的 tls.ConnectionState.NegotiatedProtocol 为空,不一定表示 TLS 握手失败,可能是没有配置 ALPN、对端没有启用 ALPN,或读取时机早于握手完成。本文按值班排障顺序说明 NextProtos、HandshakeComplete、协商结果和回滚边界。
-
Go 的 -race 依赖 cgo,但启用 cgo 不等于自动覆盖 C 库内部竞态。本文区分环境报错、Go 侧动态检测和 C/C++ 侧 ThreadSanitizer 的责任边界,并给出排查命令与适用限制。
-
SystemCertPool错误应先区分系统根加载、补充PEM读取解析与TLS验证阶段。文章给出保留错误链的封装,说明权限和路径分类的边界,以及平台、环境变量和缓存差异。
-
Go 默认 Transport 会按目标协议和环境变量选择代理。本文解释 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 与进程缓存的关系,提供独立 Transport 的配置诊断示例及部署迁移注意事项。
-
用 Go select 同时等待两个输入 channel,讲清接收分支、value 与 ok 的关闭判断、两路输入汇总,以及 default 和阻塞等待的适用边界。
-
Go fmt.Errorf 通过 %w 同时保留任务上下文与错误原因,调用方使用 errors.Is 和 errors.As 判断类别并提取详情。结合配置解析示例说明多层包装、多原因与 nil 的边界。
-
Go fuzz 测试里的种子参数不是从 *testing.F 再取一次,而是由 f.Fuzz 回调的参数直接接收。本文用 string、[]byte 和 int64 示例说明 f.Add、回调签名、默认 go test、持续 fuzz、失败输入复现与 testdata/fuzz 的选择边界。
-
用一个可落地的 Go 基准示例说明 RunParallel 的全局计时边界、goroutine 局部状态初始化、pb.Next 分工和 ns/op 结果口径。
-
filepath.Glob 返回空结果不一定是模式写错:无匹配时 err 为 nil,模式语法错误时才会返回 filepath.ErrBadPattern。本文给出区分两类结果的写法,并补充跨平台路径和文件系统错误边界。
-
Go reflect.TypeFor 适合在泛型代码中获取编译期已知类型的 reflect.Type;动态值仍应使用 reflect.TypeOf。本文用注册表示例说明两者的选择、接口边界和兼容注意事项。