Go问答技术文章
-
Go Resolver.LookupHost 返回的是本地解析器得到的地址切片,不是稳定的主备顺序。容器中的 resolv.conf、hosts 文件、Go/cgo 解析路径和 IPv4/IPv6 排序条件不同,就可能让结果顺序变化。本文给出对照排查和应用层稳定选择方案。223 收藏 -
Go 模板遇到缺失数据时可继续输出、返回元素零值或立即报错。本文解释 missingkey 三种策略、map 与 struct 的边界,并给出严格渲染、缓冲输出和表驱动测试方案。 223 收藏 -
slog.LevelVar 在单进程内并发安全且会被 Handler 每条记录读取。动态修改只影响部分请求,通常是 Logger/Handler 未共享同一 LevelVar、存在双重过滤,或多实例只更新了一个进程。223 收藏 -
Go 1.21 以后 toolchain 会依据 go.mod、go.work 和 GOTOOLCHAIN 选择版本。本文说明离线环境如何区分自动下载、PATH 预装和版本要求,并给出不触发网络下载的配置与验证清单。223 收藏 -
Golang · Go问答 | 4星期前 | 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 的 database/sql 负责传递查询与参数,但不统一规定占位符写法。本文用 MySQL 的 ? 和 PostgreSQL 的 $1、$2 对照说明驱动差异,并给出查询隔离、动态标识符白名单和测试检查方法。221 收藏 -
从 defer 的执行时机、Close 返回值、重复关闭、错误变量遮蔽和循环作用域入手,排查 Go 文件清理错误并给出不覆盖主错误的修复写法。221 收藏 -
围绕 go.work 与 replace 规则,说明如何确认 workspace、写入本地替换、判断版本是否匹配,并用 go list 检查最终依赖目录。221 收藏 -
gzip.Writer 会在首次 Write、Flush 或 Close 时把 Header 编码到底层输出;之后修改结构体只改变内存字段,无法回写已发出的字节。本文给出正确初始化、Reset 复用和防回归写法。221 收藏 -
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
Go 的 runtime.SetFinalizer 只在对象不可达后安排清理,函数里的最后一次使用不一定能把对象保活到系统调用结束。本文用非内存句柄场景拆解对象可达性、runtime.KeepAlive 的放置位置、finalizer 的边界与工程选型。221 收藏 -
解释 Go sql.DB.Stats 中 WaitCount 持续增长的含义,区分连接池等待、数据库变慢和资源未释放,并给出窗口采样与参数排查方法。220 收藏