-
讲清 Go http.Request.WriteProxy 与 Request.Write 的格式差异,演示如何生成带绝对 URI 的代理请求,并说明 URL、Host、writer 和代理连接之间的职责边界。
-
go-vcard 的 Card 用 map[string][]*Field 保存属性,同一个键可以对应多个字段。Add 会追加字段,Set 会把该键替换为只含一个字段的切片,因此两者产生不同数量是明确的容器语义。
-
解释 runtime.NumCPU 与 runtime.GOMAXPROCS(0) 的差异来源,结合显式配置、CPU 亲和性、Linux cgroup CPU 限额和 Go 1.25 容器感知默认值,帮助排查时判断何时正常、何时需要调整。
-
Go database/sql 事务提交后查询不到数据,通常不是 database/sql 缓存了旧结果,而是写入或提交错误被忽略、上下文取消、读写 DSN/schema 不一致、查询条件变化或读到了尚未同步的副本。本文用最小复现固定 BeginTx、Exec、Commit 和读回,再按六类分支定位问题。
-
time.Ticker.Reset 会停止当前计时并按新周期重新计时,下一次 tick 要等新周期经过。本文从批处理场景拆解立即触发的常见误判,并给出只创建一个 ticker、单点重置、可停止和可审计的实现方式。
-
Go database/sql 可以通过 driver.Connector 把驱动连接配置交给 sql.OpenDB。本文说明 Connector、*sql.DB 和连接池的职责边界,并给出统一配置、多个独立连接池及关闭处理的写法。
-
Go 读取 TLS 证书到期时间的关键是等待握手完成,再从 ConnectionState.PeerCertificates[0] 取得对端叶子证书,并读取 x509.Certificate.NotAfter。文章给出剩余时间计算、过期判断和客户端与服务端空证书边界的可复用写法。
-
Go 的 os.ReadDir 会按文件名排序,而 File.ReadDir 按目录顺序读取。本文解释两者差异、字典序与自然排序的边界,以及 n 参数和 io.EOF 的处理方式。
-
net.LookupCNAME 返回的是跟随零条或多条 CNAME 后的规范化名称。判断查询是否失败要先看 err;没有显式 CNAME 但主机能解析到地址时不一定是错误,需要上下文时使用 Resolver.LookupCNAME。
-
Go x/text/secure/bidirule 按 RFC 5893 实现双向文本规则。本文说明混合左右方向字符为何可能不合法,拆解 LTR/RTL 标签、EN/AN 数字冲突、末尾字符约束,并给出 ValidString 与 Transformer 的 Go 用法。
-
用 slog.HandlerOptions.Level 过滤 DEBUG 日志,并用 slog.LevelVar 在运行时切换最低级别,掌握默认 Logger、Enabled 和多 Handler 的边界。
-
Go 的 Color.RGBA 返回 alpha 预乘的 16 位通道,而 NRGBA 结构体保存非预乘的 8 位字段。本文用 NRGBAModel.Convert 处理 RGBA、NRGBA 与半透明像素转换,避免重复乘 alpha。
-
逐层复制url.Values的map和值切片,保留空值语义,并通过同步分页编码演示工作副本复用,说明并发交接和分配边界。
-
Go types.Package.Imports 返回的是当前包的直接导入列表,不是完整传递依赖闭包。本文解释源码顺序、export data 例外,以及如何递归遍历并按包路径去重收集传递依赖。
-
用 Go ldflags 把版本号、提交号和构建时间注入专用变量,讲清 -X 的路径写法、可复现构建边界、CI 参数和常见失效原因。