Go问答技术文章
-
slices.Delete 的结果看似不稳定,通常来自忽略返回值、共享底层数组、len/cap 误判或并发读写。本文用 Go 示例和排查表说明稳定删除区间、处理尾部引用与隔离数据竞争的方法。315 收藏 -
讲清 Go atomic.Value 零值 Load、首次 Store 类型确定、sync.Once 懒初始化和不可变配置快照之间的边界,避免 nil 与类型不一致 panic。314 收藏 -
Go internal 的可见性按导入路径中的父树判断,而不是按物理目录、仓库或 go.work 判断。本文用多模块示例拆开允许范围、排查命令与三种包边界修复方案。314 收藏 -
Go test 报 internal package not allowed 或找不到内部包时,关键不是测试命令本身,而是导入者是否位于 internal 父目录树内。本文用目录、module 和测试包名拆出根因与修复方式。314 收藏 -
Golang · Go问答 | 3星期前 | HTTP · go · Context · net/http · Go net/http Transport goroutine泄漏 context取消 DialContext
自定义 http.Transport.DialContext 时,只有把请求 Context 传到真正可取消的等待点,才能避免连接 goroutine 长期滞留。本文用一个小型拨号器说明 net.Dialer.DialContext、自定义名额等待、Transport 接入、错误适配和 trace 排查的边界。314 收藏 -
Go CookieJar 跨子域会话异常应区分拒收与目标筛选,结合表驱动测试检查 Domain、Path 和 Secure,并明确 SameSite 的浏览器边界。314 收藏 -
strconv.ParseUint 不接受前导加号或负号。通过批量大小命令行示例,区分符号策略、固定十进制、位宽范围与业务区间,并说明语法错误、范围错误和旧协议加号兼容的处理方式。314 收藏 -
Go 用较短内容覆盖旧文件时不会自动删除尾部字节,使用 os.File.Truncate 按新长度截断,并注意文件偏移、写权限和并发边界。314 收藏 -
Go 服务端可以直接调用 r.Referer() 读取请求头中的 Referer;缺失时返回空字符串。本文说明它与 Header.Get 的关系、测试写法、代理和隐私策略造成的缺失边界,以及为什么不能把 Referer 当成认证或安全授权依据。314 收藏 -
Go 的 os.Rename 遇到跨文件系统路径时可能返回 invalid cross-device link。稳妥做法是在目标目录创建临时文件,用 io.Copy 完成复制并关闭后,再在目标文件系统内 Rename,最后成功才删除源文件。313 收藏 -
讲清 Go GODEBUG gocacheverify 如何绕过缓存命中、重建并比较旧新输出,配合 gocachehash、go clean -cache 和 -a 排查构建缓存一致性。313 收藏 -
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 收藏