Go语言技术文章
-
plugin.Open 返回不兼容错误时,先检查应用和插件是否使用相同的 Go 工具链、构建标签、环境变量与共享依赖源码,再决定是否重新统一构建或改用 IPC。175 收藏 -
testing.T.Setenv 不会返回 error,设置失败会直接让测试失败;并行测试还会触发额外限制。本文区分 t.Setenv、os.Setenv、Fatal 输出和并发冲突,给出稳定的 Go 测试写法。175 收藏 -
go/version.IsValid 判断的是带 go 前缀的 Go 工具链版本语法。本文用一个最小项目拆解前缀、数字段、预发布标记和自定义后缀,定位 1.23、前导零及补丁后预发布写法被拒绝的原因。175 收藏 -
用 Go iter.Pull 把 iter.Seq 转成 next/stop 逐项读取,区分零值与结束信号,处理空输入和提前退出,并说明业务错误如何保持清晰边界。175 收藏 -
Go 的 panic 和 recover 只作用于当前 goroutine 的调用栈。本文解释外层 recover 为什么接不到子 goroutine 的 panic,并给出在 goroutine 内部恢复、传递错误和选择 error 的实用写法。174 收藏 -
Go testing.T.Setenv 测试单独通过、整包失败时,如何区分并行限制、配置缓存与后台任务污染,并用串行环境适配和显式输入稳定测试。174 收藏 -
Go 的 Rows.ColumnTypes 返回结果集列元数据,ColumnType.DatabaseTypeName 读取驱动提供的 SQL 类型名。本文说明它与列名、ScanType、Length 的区别,以及驱动不支持时空字符串的排查方法。174 收藏 -
Golang · Go教程 | 2天前 | 标准库 · time · Go教程 · 日期时间 · Go 时区 日期解析 time.LoadLocation time.ParseInLocation time.Location
本文从无时区日期被解析成 UTC 的现象出发,用 Go time.LoadLocation 和 time.ParseInLocation 完成指定时区的本地日期解析,并说明输入错误、加载失败、固定偏移和夏令时边界。174 收藏 -
Go iter.Pull2 把 push 风格的 iter.Seq2 转成 next 和 stop 两个函数。本文用提前匹配、错误返回和完整消费三个场景说明为什么要 defer stop,并梳理重复 Stop、零值返回和并发调用边界。172 收藏 -
go test -shuffle 失败时,先根据是否出现 -test.shuffle seed 区分参数解析、构建或测试运行阶段,再用固定 seed 重现顺序问题。172 收藏 -
Go 1.21 以后,go 命令可能根据 GOTOOLCHAIN、go.mod 或 go.work 选择另一个工具链。本文按错误形态区分配置语法、版本过旧、PATH 缺失和自动下载失败,并给出用 go version、go env 与 toolchaintrace 定位的顺序。172 收藏 -
Go testing.AllocsPerRun 会先执行一次 warm-up,再从 runtime.MemStats 的 Mallocs 增量中计算指定 runs 次调用的平均分配次数。本文拆解测量边界、整数平均值、GOMAXPROCS 约束和常见误解。172 收藏 -
Go net/url.URL 的临时分配通常来自重复 Parse、查询参数编码和最终字符串输出,而不是 URL 结构体本身。本文用可复用 URL、受控 RawQuery 和 Go 1.24+ 的 AppendBinary 组合,说明如何减少循环中的短命对象,并给出 Clone、JoinPath、String 与基准测试的取舍。172 收藏 -
Go encoding/binary.Uvarint 返回 n=0 通常表示当前字节切片还不完整,不是已经确认格式错误。本文解释 n 的正负含义、补读缓冲区的方法,以及 Uvarint 与 ReadUvarint 的选择边界。171 收藏 -
Go io.LimitReader 适合限制可选字段本次最多读取的字节数,但它不会自动判断字段是否完整。本文用存在标记和长度前缀示例,说明如何配合 io.ReadFull 处理字段不存在、长度超限和 io.ErrUnexpectedEOF。171 收藏