Go语言技术文章
-
Go 1.26 的 go fix 支持 //go:fix inline,可把旧函数、常量或类型别名迁移到新 API。本文从薄包装、diff 预览、参数副作用、defer 与测试边界说明如何准备规则。417 收藏 -
gzip.Reader 的完整性校验依赖读取到 EOF,不能用 Close 成功替代。本文区分读取与关闭错误,提供限制解压大小的完整示例,并说明提前停止、多成员和底层资源的处理边界。417 收藏 -
Go JSON null 会清空普通指针字段,但字段缺失与整数零有不同含义。通过独立快照、RawMessage 和存在标志处理配置更新,避免 nil 解引用与旧值残留。417 收藏 -
Go 的 math/bits.Rem64 用 hi、lo 两个 uint64 表示双字无符号被除数并返回余数。本文说明参数含义、零除数边界,以及 Rem64 与 Div64 在商溢出处理上的区别。417 收藏 -
filepath.Glob遇到非法模式会返回ErrBadPattern,忽略err才容易误认为普通空结果。本文给出最小错误处理写法,区分无匹配与目录读取问题,并说明相对路径、星号和跨平台转义的边界。417 收藏 -
Go log/slog.Logger 减少临时分配的关键不是盲目复用对象,而是让日志调用尽早走 Attr 路径:优先使用 LogAttrs 和类型化 Attr,把稳定上下文交给 With 预处理,只对昂贵参数做 Enabled 预判断。本文结合调用路径、属性复用和适用边界说明具体写法。417 收藏 -
Go types.Interface 用两组 API 分别枚举显式方法与完整方法集。本文通过嵌入接口示例说明数量上界、底层类型、排序和类型约束的区别,适合文档生成与静态分析工具。417 收藏 -
使用 Go os/exec 的 StdoutPipe 或 StderrPipe 时,Cmd.Wait 会在看到子进程退出后关闭管道,因此必须先消费完输出再 Wait。本文拆解单管道、双管道并发读取和替代 API 的选择。417 收藏 -
slices.SortStableFunc 并不会替你修正比较函数。本文从负、零、正返回值、相等元素保序和严格弱序三个边界,说明怎样写出可检查的稳定排序比较器。416 收藏 -
Go 1.23 引入的 slices.Collect 会把 iter.Seq 收集为新切片,但空序列返回 nil,容量也不是 API 承诺。本文拆开 nilness、容量、元素别名和重复消费边界,给出稳定测试写法。416 收藏 -
Go 使用 crypto/ed25519 验证带上下文的签名时,要让 message、Options.Context 和 PublicKey 在两端保持一致。本文用规范化消息和 VerifyWithOptions 示例说明常见失败原因。416 收藏 -
Go 里想让多个 goroutine 同时停止,适合关闭一个只承载通知的 channel,而不是逐个发送停止值。本文讲清关闭者、接收者、select 和 sync.Once 的边界。416 收藏 -
QueryContext 超时后连接仍在 InUse,不一定是连接泄漏。本文从驱动取消能力、Rows.Close、Rows.Err 和 DB.Stats 四个角度说明如何定位回池延迟。416 收藏 -
Go 的 sync.Mutex 首次使用后不能复制。本文用结构体赋值和值接收者说明复制如何造成永久等待或保护失效,并给出指针接收者、go vet 与并发测试的修复清单。416 收藏 -
Go 1.24 起 text/template 可直接 range iter.Seq2。本文用 slices.All 演示两个模板变量的绑定方式,并说明空序列、单变量语义、顺序和兼容处理。416 收藏