Go语言技术文章
-
Go Resolver.LookupHost 返回的是本地解析器得到的地址切片,不是稳定的主备顺序。容器中的 resolv.conf、hosts 文件、Go/cgo 解析路径和 IPv4/IPv6 排序条件不同,就可能让结果顺序变化。本文给出对照排查和应用层稳定选择方案。223 收藏 -
用一个批量消费键值序列的场景,拆开 Go iter.Pull2 的 next、stop 与提前退出边界,说明如何把 Seq2 接入旧式 for 循环并避免遗漏清理。222 收藏 -
Go 配置驱动正则时,不要用 MustCompile 把外部输入变成 panic。本文用 regexp.Compile、配置键包装和规则对象,说明如何把编译失败交给配置层,并处理启动、热加载与旧规则回退边界。222 收藏 -
Golang · Go问答 | 3星期前 | select · time.After · Go问答 · Go time.After 循环 Go timeafter 出错 Go 定时器增长 Go NewTimer Reset Go select 超时
循环中反复调用 time.After 可能让分配和未触发计时器数量持续上升。本文区分 Go 1.23 前后的回收边界,给出可复用 Timer 的 Stop、排空与 Reset 写法,并说明什么时候应换成 Ticker 或 context.WithTimeout。222 收藏 -
Go HTTP 服务收到 SIGTERM 后,用 NotifyContext 接管信号,再以带截止时间的 Server.Shutdown 停止监听并等待活动请求完成。222 收藏 -
unsafe.SliceData 对空切片的结果取决于 nil 和 cap:nil 返回 nil,cap 为 0 的非 nil 空切片返回不确定地址,不能直接解引用;cap 大于 0 时才有首个 backing array 元素可谈。222 收藏 -
围绕 Go crypto/x509 的证书链验证,区分叶子证书、中间证书和信任根,说明 SystemCertPool、NewCertPool、VerifyOptions 以及常见错误的排查顺序。222 收藏 -
围绕 Go filepath.Match 的方括号字符类,说明转义、字符区间、ErrBadPattern 以及 Unix 和 Windows 的差异,给出可直接改成测试的写法。222 收藏 -
Go 1.21 引入的 slices.Clip 可以把切片容量收紧到长度,适合在保留小结果、释放大底层数组引用时使用。本文用可运行示例说明它的边界。221 收藏 -
用 Go os.File.Chown 在 Linux 上修改文件的数字 UID 和 GID,区分权限、符号链接与跨平台边界,并用 Stat 和错误分类完成可回滚验收。221 收藏 -
Go 1.27 的 httptest.NewTestServer 把 HTTP 测试接入内存网络,适合和 testing/synctest 一起验证并发、超时与取消语义,但它不替代真实网络和部署验收。221 收藏 -
Go encoding/csv 默认按首条记录校验后续列数,本文解释 ErrFieldCount 的原因,并给出固定列定位坏行、变长记录安全读取和字段策略选择方法。221 收藏 -
Go 的 database/sql 负责传递查询与参数,但不统一规定占位符写法。本文用 MySQL 的 ? 和 PostgreSQL 的 $1、$2 对照说明驱动差异,并给出查询隔离、动态标识符白名单和测试检查方法。221 收藏 -
从 defer 的执行时机、Close 返回值、重复关闭、错误变量遮蔽和循环作用域入手,排查 Go 文件清理错误并给出不覆盖主错误的修复写法。221 收藏 -
Go container/heap 的堆顶不对,通常不是 Push 自己排序失败,而是 Less 方向、Init 时机、接口内部 Pop 或修改元素后未调用 Fix。本文按不变量和 API 职责给出排查与修复方法。221 收藏