-
Go 1.21 以后,go 命令可能根据 GOTOOLCHAIN、go.mod 或 go.work 选择另一个工具链。本文按错误形态区分配置语法、版本过旧、PATH 缺失和自动下载失败,并给出用 go version、go env 与 toolchaintrace 定位的顺序。
-
Go testing.AllocsPerRun 会先执行一次 warm-up,再从 runtime.MemStats 的 Mallocs 增量中计算指定 runs 次调用的平均分配次数。本文拆解测量边界、整数平均值、GOMAXPROCS 约束和常见误解。
-
用 sql.NullString 区分数据库 NULL、空字符串和普通文本,说明 String 与 Valid 的关系,并给出可空字段映射、扫描错误和查询无行的处理方式。
-
Go 的 os/user.Current 用于获取当前进程用户,首次调用后会缓存结果;os/user.Lookup 用于按用户名查询,并在找不到用户时返回 UnknownUserError。本文结合 cgo、osusergo 和跨平台字段差异说明怎样选择。
-
Go 泛型调用无法推导类型参数时,先判断缺少的是实参类型信息、函数值上下文还是约束匹配,再补完整类型参数或最短前缀。本文用无参数函数、部分推导、回调和 comparable 约束说明修复边界。
-
Go encoding/binary.Uvarint 返回 n=0 通常表示当前字节切片还不完整,不是已经确认格式错误。本文解释 n 的正负含义、补读缓冲区的方法,以及 Uvarint 与 ReadUvarint 的选择边界。
-
Go Timer Reset 的安全写法取决于 Go 版本和计时器状态。本文围绕 Stop、Drain 与 Reset 的先后关系,说明 Go 1.22 及更早版本的兼容处理、Go 1.23 之后的语义变化,以及通道型 Timer 与 AfterFunc 的不同边界。
-
encoding/json/v2 默认拒绝 JSON 字符串中的无效 UTF-8,因此旧数据在迁移或接入边界处可能出现解码失败。本文用真实无效字节说明严格模式、AllowInvalidUTF8(true) 和 U+FFFD 替换之间的关系,并给出兼容与拒绝的选择边界。
-
Go 1.22 以后,ServeMux 的单段路径变量和末尾多段通配符并非一重叠就冲突。本文用请求集合解释真正的交叉模式,说明如何通过字面路径段拆开路由边界,并提醒 PathValue、尾部斜杠和旧版本兼容开关的使用边界。
-
Go encoding/csv.Reader.InputOffset 返回当前输入流的字节偏移,正好位于最近读取记录的末尾和下一条记录的开头。本文用逐条读取示例说明如何记录 CSV 行区间、处理多行字段,并把偏移用于断点与错误定位。
-
Go 的 HTTP Trailer 读取不到,通常不是字段不存在,而是服务端没有在首次写响应前声明 Trailer,或客户端还没有读完 Response.Body。本文用一个可复用的 httptest 示例说明声明、写入、读取时机,以及动态 TrailerPrefix 的边界。
-
说明 database/sql 中 PrepareContext、Tx.StmtContext 与 QueryContext/ExecContext 的职责区别,给出可复用预编译语句传递请求超时、事务绑定和资源回收的最小方案。
-
Go 自定义 MarshalJSON 时直接再次编码原类型会无限递归。本文说明 json.Marshaler 的触发原因,并用新的定义类型复用默认字段编码、追加自定义字段,同时保留错误处理边界。
-
Go context 的 Done 只能通知退出,Err 只能说明取消类别。本文用 WithCancelCause 和 Cause 区分超时、主动取消与业务失败,并解释父子 Context 首次取消的传播边界。
-
Go bitset 的 Complement 计算的是当前 BitSet 长度以内的局部补集,不是无限整数域的补集。本文用 New、Set、Len 和 Count 说明如何明确边界并避免误读结果。