Go语言技术文章
-
fmt.Errorf 用 %w 包装自定义错误后,调用方可通过 errors.As 找回具体类型;本文解释值接收者、指针接收者、%v 与目标指针的对应关系。481 收藏 -
Go 的 string 可以携带任意字节,协议入口不能仅凭类型就认为它是合法文本。本文用 unicode/utf8.ValidString 区分完整 UTF-8、截断序列和业务上不允许的内容,并给出拒绝与记录的落地写法。143 收藏 -
Go errors.Join 会丢弃传入的 nil 错误;如果所有参数都是 nil 则返回 nil,否则返回只包含非 nil 成员的组合错误。本文用边界输入说明如何判断和检查成员。320 收藏 -
用 Go 的 len、unicode/utf8.RuneCountInString 和项目级宽度规则区分字节数、Unicode 码点数与屏幕显示宽度,避免中英文、emoji 和非法 UTF-8 造成长度判断偏差。333 收藏 -
围绕 Go errors.As 的指针与非指针目标写法,解释 Error 接收者、%w 包装、接口目标和常见 panic 边界,给出可直接套用的判断表与代码示例。265 收藏 -
Go strings.FieldsFunc 会把连续满足条件的字符视为一个分隔区间,并丢弃首尾分隔符。本文用混合分隔符和边界输入说明如何稳定切词、避免空字段误判。111 收藏 -
解释 Go 中 panic(nil) 看起来无法被 recover 读取的原因,区分 Go 版本、defer 调用位置和 typed nil 接口,并给出可复用的恢复与记录写法。293 收藏 -
Go strings.Cut 返回的空字符串不一定代表分隔符缺失,真正的判断依据是 found。本文用边界输入和可复用代码区分空字段与缺失分隔符。272 收藏 -
解释 Go defer 调用方法时接收者和参数的求值时机,比较值接收者、指针接收者与闭包写法,帮助排查为什么延迟日志读到旧值。359 收藏 -
strings.Builder 能减少循环拼接中的中间字符串复制,但 Grow、String、Reset 和按值传递都有明确边界。本文用最小示例说明如何预估容量、保持单一所有者,并用 Cap、Len 和基准测试判断优化是否成立。274 收藏 -
解释 Go 循环中 defer 为什么会让资源和内存峰值随迭代数增长,并用小函数边界改写为每轮及时清理。129 收藏 -
讲清 bytes.Buffer 处理分段响应时 Len、Cap、Grow、Reset 和 Bytes 的边界,给出复用同一缓冲区、复制别名数据和隔离并发请求的实战写法。154 收藏 -
Go test 显示 cached 不代表测试代码再次运行。本文用 -count=1 做一次明确复查,并区分清理缓存、重复运行和 CI 排查时的使用边界。424 收藏 -
代码生成器不要手工维护缩进和导入顺序:先输出完整且合法的 Go 文件,再用固定版本 gofmt 统一空白,用 gofmt -d 检查生成结果是否稳定。214 收藏 -
Go test -run 匹配不到子测试时,重点检查正则是否按父测试和子测试分段、斜杠是否被误当层级,以及名称空格是否已规范化。396 收藏