Go问答技术文章
-
Go 模糊测试只覆盖少量路径时,先拆分种子输入边界,再检查 fuzz target 的可达性、确定性和运行指标,逐步提升语料质量。313 收藏 -
Go HTTP 服务可以通过 Server.ConnContext 为新连接创建带元数据的上下文,后续请求从 r.Context() 继承读取。本文用连接追踪标识演示配置方式,并比较 BaseContext、ConnContext 与请求级 WithContext 的边界,说明 HTTP/2 并发和资源清理时的注意事项。313 收藏 -
Golang · Go问答 | 3星期前 | 并发 · 单元测试 · go · database/sql Go sqlmock MatchExpectationsInOrder 并发查询测试 预期顺序
Go sqlmock 默认按预期注册顺序匹配,多个 goroutine 并发查询时,实际到达顺序可能不同,测试就会误报。本文说明如何用 MatchExpectationsInOrder(false) 解除不必要的顺序约束,同时保留 SQL 和参数匹配,并区分事务等必须有序的场景。313 收藏 -
Go 上下文取消后下游请求仍不退出,通常不是 cancel 失效,而是取消信号没有传到具体 API,或底层阻塞点本身不支持取消。本文按 HTTP、数据库和自定义调用链给出排查与修复方法。313 收藏 -
Go 模板提示自定义函数未定义时,应在同一模板集合解析前注册 FuncMap。通过统一构造器、命名模板与独立缓冲输出,区分注册、解析和执行错误,避免在并发请求中修改共享模板。313 收藏 -
Go database/sql 的 sql.NullTime 扫描 NULL 后应让 Valid=false。本文拆开 NULL、有效时间、扫描错误和对象复用四种状态,给出 QueryRow、Rows.Scan 与 Value 的正确处理方式。313 收藏 -
Go 中把 nil 指针作为 error 返回后,接口会保留具体动态类型,因此 err 可能不等于 nil。本文用代码说明 typed nil 的形成原因、成功分支的正确返回方式,以及类型断言排查时的边界。313 收藏 -
多个 goroutine 同时查询时,如何只接收一个可用结果并让其余任务及时退出?本文用一个可复现的 Go 示例拆开 select 竞争、取消信号和结果通道关闭顺序。312 收藏 -
Go 的 regexp.FindStringSubmatchIndex 返回的是字节下标,不是字符位置。本文用带中文的日志片段说明如何读取捕获组、处理未匹配分组,并避免切片越界。312 收藏 -
Go 的 bytes.Buffer.AvailableBuffer 返回可借用的尾部空间,但它不是已经写入的数据。本文用最小程序说明 Bytes、AvailableBuffer、Write 与 Reset 的边界,避免把缓冲容量误当成有效长度。312 收藏 -
用 Go archive/tar.Reader.Next 遍历带 PAX 扩展的 tar 包时,扩展头不会作为普通文件交给业务层。本文说明如何读取真实 Header、处理当前文件剩余数据,并区分 io.EOF 与 ErrInsecurePath。312 收藏 -
发布 Go 模块时,不能只检查 vendor 目录是否存在。通过重新生成 vendor、对照 vendor/modules.txt 和强制 -mod=vendor 构建,可以及时发现依赖版本漂移。312 收藏 -
多个 goroutine 共用一个 channel 时,不要让任意发送方直接关闭它。本文用 WaitGroup 统一等待发送方,用协调者关闭数据 channel,并用 done 处理接收方提前退出,避免 send on closed channel 和发送 goroutine 泄漏。312 收藏 -
用 Go 的 encoding/xml 流式读取 XML 时,EndElement 不是靠字符串猜测匹配。本文用 xml.Name 栈解释嵌套结束标签、自闭合标签、命名空间和 io.EOF 的判断方式。312 收藏 -
Go execution trace 看不到自定义任务区域,通常与采集窗口、Task 与 Region 的边界、Context 传递或查看范围有关。本文按四个检查点定位原因,并给出可复用的 runtime/trace 写法。312 收藏