-
Colly 的 OnError 同时可能面对传输层失败、非 2xx HTTP 响应和解析回调错误。本文用 Response、StatusCode、errors.As 与 ParseHTTPErrorResponse 说明如何分类,并把判断接到日志、重试和异步收尾。
-
从 go.mod、go.work 和 GOTOOLCHAIN 三个入口理解 Go toolchain 自动选择,说明 go 与 toolchain 的区别,以及 local、auto、path 和固定版本模式的取舍。
-
Go 新循环变量语义改变了 loopclosure 诊断。区分循环声明与外部赋值变量,用显式参数绑定任务,并说明无诊断不代表闭包或共享对象并发安全。
-
Go reflect 中,CanAddr 只回答能否取得地址,CanSet 才进一步回答能否修改。本文用普通值、指针 Elem、切片元素和结构字段说明可寻址与可设置的边界。
-
Go Fuzz 可以把解析器的正常样例、空输入和历史失败语料放进种子集合,再用覆盖率引导生成新的字节输入。本文从 FuzzXxx、f.Add 和 f.Fuzz 写起,说明如何检查解析结果、运行限时模糊测试,并把失败输入保留为回归语料。
-
Go 1.24 起可以用 os.Root 把文件操作限制在指定目录树内。本文用 Root.Remove 删除根目录内文件和空目录,并说明相对路径、越界路径、非空目录与 Root 生命周期的错误边界。
-
Go encoding/csv 的 Write 会先把记录写入内部缓冲,Flush 才把缓冲交给底层 io.Writer。本文说明 Writer.Error 为什么必须在 Flush 后检查,怎样区分 Write 的即时错误、Flush 的延迟错误和 WriteAll 的返回值。
-
Go 服务可以用 x/text/language 的 ParseAcceptLanguage 读取 Accept-Language 头,把语言标签和 q 权重交给 Matcher 选择支持的语言。本文覆盖返回值、排序、错误和回退处理。
-
调用泛型函数时,只要普通实参或明确的目标函数类型能唯一推断缺失类型参数,通常可以省略;类型参数只出现在结果中、函数值没有目标类型、nil 等实参不提供类型信息时,就要显式填写。泛型类型则始终需要显式类型实参。
-
Timer Reset 后立刻超时,通常与旧版缓冲计时器通道中的过期值有关。本文对照 Go 1.23 前后语义,给出 chan-based Timer 的复用写法、AfterFunc 边界、版本判断和回退检查清单。
-
Go 的 crypto/mlkem 把 ML-KEM 密钥分成私有的 DecapsulationKey 和公开的 EncapsulationKey。本文说明 GenerateKey、Bytes、New*Key 的对应关系,并整理 768/1024 参数集的序列化长度与工程基线。
-
Go http.Client 可以在 CheckRedirect 中读取 via 请求链并设置跳转上限。本文区分重定向次数与请求总数,说明普通错误和 http.ErrUseLastResponse 对 Response、Body 和 url.Error 的不同影响。
-
Go json.Decoder 可能提前从底层 Reader 读取数据,Decode 返回后仍有一部分字节停留在内部缓冲。本文说明 Buffered 的准确边界、如何和底层 Reader 余量拼接,以及为什么下一次 Decode 或 Token 后不能继续依赖旧 reader。
-
Go JSON 使用 Decoder.UseNumber 后,转换失败通常不是 UseNumber 失效,而是 json.Number 与目标字段语义不匹配。本文从原始字面量、Int64/Float64 转换和 UnmarshalTypeError 字段路径入手,定位格式、范围与协议问题。
-
Go 1.27 的 go fix 新增 slicesbackward modernizer,可把符合条件的手写切片反向循环迁移到 slices.Backward。本文说明如何预览变更、何时保留索引变量,以及生成文件和构建标签带来的边界。