Go语言技术文章
-
Go 测试里可以用 testing.T.Setenv 临时设置环境变量,测试和子测试结束后由 Cleanup 恢复原值。本文说明缺失值与空值的区别,以及为什么 Setenv 不能和 t.Parallel 或并行祖先一起使用。184 收藏 -
用 Go testing.T.TempDir 为文件测试建立独立临时目录,理解自动清理、并行子测试隔离、路径派生和 GOTMPDIR 的边界。263 收藏 -
Go 项目新增依赖后,go.mod 已经变化但 -mod=vendor 仍然找不到包,通常是 vendor 目录和 vendor/modules.txt 没有同步。本文按检查、更新、复查三条线定位原因。388 收藏 -
用 Go 的 encoding/hex 把二进制 ID 转成稳定的小写十六进制文本,并说明 DecodeString 的输入边界、错误处理和预分配写法。477 收藏 -
Go replace 指向本地目录后 CI 找不到依赖,通常是替换路径在干净 runner 中不可见。本文用相对路径、go.work 和可访问模块三种方案说明如何修复,并给出提交前的反向检查。448 收藏 -
Go 处理 URL 参数中的无填充 base64 时,关键是按字母表和填充约定选择 RawURLEncoding,而不是把所有输入都交给 StdEncoding。本文给出判断表、解码代码和兼容排错方法。405 收藏 -
GOPROXY=off 不是使用本地缓存的开关,而是禁止 go 命令从任何来源下载模块。本文从 GOMODCACHE、go.sum、vendor 和 file 代理几个边界说明新依赖失败的原因,并给出可复现的离线构建处理方式。155 收藏 -
Go 计算大文件 SHA-256 时,不必先把文件读成 []byte。本文用 crypto/sha256.New、os.Open 和 io.Copy 边读取边累计哈希,并说明文件关闭、输出编码、空文件和重复读取的边界。132 收藏 -
Go 出现 verifying module: checksum mismatch 时,先保留模块路径和版本,核对 go.mod、go.sum、本地模块缓存,再检查 GOPROXY、GOSUMDB 与 GOPRIVATE。本文给出不误删校验记录的排查顺序和恢复动作。104 收藏 -
Go TLS 客户端使用 x509.NewCertPool 和 AppendCertsFromPEM 从内存加载自定义 CA,并通过 tls.Config.RootCAs 只按指定证书池验证服务器。343 收藏 -
Go 的 internal 包不是按符号链接显示位置授权。模块模式下,go 命令主要按导入路径判断 internal 父树;本文讲清报错原因、定位方法与模块边界修复方案。294 收藏 -
用 net.Resolver.LookupHost 配合 context.WithTimeout 给 DNS 查询单独设定预算,并通过 DNSError、Timeout、Temporary 和上下文错误区分重试、取消与域名不存在。103 收藏 -
t.Setenv 修改的是整个测试进程的环境变量,Cleanup 只负责结束后恢复,不能消除并行期间的共享状态。本文说明 t.Parallel 的直接与祖先冲突,并给出串行环境测试和显式配置注入的改法。381 收藏 -
使用 Go net/netip.ParseAddr 校验 IPv4、IPv6 和 IPv4-mapped IPv6,再用 Is4In6、Unmap 与 String 输出稳定的规范地址。407 收藏 -
Go 测试使用 t.Parallel 后,如果多个子测试复用父测试创建的临时目录、固定文件名或可变对象,就可能互相覆盖。本文解释调度边界,给出 t.TempDir 隔离夹具、识别共享资源和复查修复的实用方法。432 收藏