Go语言技术文章
-
处理键值文本时,strings.Cut 适合围绕第一个分隔符取左右两段,strings.Split 适合获取全部片段。本文用 Go 示例说明两者的返回语义、空字段、缺少分隔符和空分隔符边界,并给出选择方法。297 收藏 -
time.AfterFunc 的 Timer.Reset 返回 false,只说明旧定时器已经到期或停止,不代表旧回调已经结束。本文用 started/finished 信号说明如何判断旧回调状态,并避免新旧回调并发访问共享数据。297 收藏 -
Decoder.UseNumber 只把 interface 中的 JSON 数字保留为 json.Number,避免先转 float64;它不会替目标类型检查范围。转换为 int64、uint64 或 big.Int 时仍要检查错误与业务上限。297 收藏 -
用 Go 标准库统一处理 JSON 未知字段、大整数与金额精度、RFC3339 时间,并给出可复用的解码入口和边界检查。297 收藏 -
Go hex.Dumper 的 Write 可能在输出行头、字节区或整行收尾时遇到底层 Writer 错误,而不足 16 字节的尾行要等 Close 才补齐。本文给出保留首个错误、正确处理 Close 并明确资源关闭责任的写法。297 收藏 -
用 Go time.LoadLocation 集中管理 IANA 时区,区分 Parse 与 ParseInLocation,统一 UTC 存储和 Time.In 展示,并说明夏令时与 tzdata 缺失时的处理边界。296 收藏 -
用 Go archive/tar 逐项读取归档,在写盘前校验条目路径,拒绝目录穿越、链接和特殊文件,并限制单项与总展开资源。296 收藏 -
解释 Go bufio.Scanner 连续空 token 停止或 panic 的根因,区分 nil token、advance 与 ErrFinalToken,并给出安全 SplitFunc 写法。296 收藏 -
Go 插件注册器若只检查方法名,错误参数或返回值会拖到反射调用时才触发 panic。本文复盘这一故障,演示如何用绑定方法的 reflect.Type 在注册阶段精确限制签名,并补齐 nil、重复名称、变参方法与表驱动测试。296 收藏 -
Golang · Go问答 | 7小时前 | 结构体 · 单元测试 · go · 结构体比较 Go go-cmp cmp.Equal Equal方法 cmp.Transformer cmp.Comparer
go-cmp 的 cmp.Equal 在没有被选项覆盖时,会优先调用符合签名的 Equal 方法,因此不会继续逐字段比较。本文拆解这个决策顺序,并给出用 Transformer 去掉 Equal 方法、或用 Comparer 明确覆盖的测试写法。296 收藏 -
用 Go io.Pipe 把压缩写入端和上传读取端连接起来,理解无内部缓冲带来的自然背压,并处理成功关闭、生产失败和上传失败的资源收口。295 收藏 -
io.Reader 一次 Read 不保证填满缓冲区。本文用固定 8 字节头和变长负载示例,讲清 io.ReadFull 的补齐语义、EOF 与 ErrUnexpectedEOF 的区别、长度上限和网络读超时。295 收藏 -
Go DNS 返回多个 A/AAAA 地址后,真正决定连接落点的是 Resolver 结果、Dialer 回退和连接池复用。本文区分默认 DialContext 与显式地址轮转策略,给出共享超时、失败回退和观测边界。295 收藏 -
maps.Equal 使用 == 比较 map 值,而 IEEE 754 NaN 与包括自身在内的任何 NaN 都不相等,因此两个相同键下都保存 NaN 的 map 也会比较失败。本文给出 EqualFunc 修复值比较的方法,并说明 NaN 键为何必须规避。295 收藏 -
Go sqlmock 默认把预期 SQL 当正则表达式处理,问号和括号会改变匹配语义。本文说明如何用 regexp.QuoteMeta 或 QueryMatcherEqual 修复测试。295 收藏