-
用 Go crypto/sha3.New256 复用 SHA3-256 哈希对象,讲清 Write、Sum、Reset 的边界、批量摘要中的清理顺序,以及 sync.Pool 归还对象时怎样避免串状态。
-
Go go/types.Config.IgnoreFuncBodies 可以让类型检查器跳过函数体,但不会跳过函数声明、参数和返回值。本文用最小源码分析流程说明它的影响范围、Info 映射的取舍,以及为什么函数体内表达式信息会变得不完整。
-
Go constant.Compare 可以直接比较 constant.Value,不需要先转成 float64。本文用 MakeFromLiteral 构造超出 float64 精确范围的大整数,再说明 LSS、EQL、GTR、Unknown 和近似转换的边界。
-
Go base64.NewEncoder 会暂存不足一个完整分组的输入,必须在读取结果或交给下游前调用 Close 刷新尾部数据;本文用 bytes.Buffer 和 Writer 示例说明 Close、Write 及错误处理边界。
-
Go flag.FlagSet.SetOutput 只能改变解析错误和 Usage 的输出位置;要让调用方拿到错误并自行决定返回或退出,还要使用 flag.ContinueOnError。
-
errors.Join 会把多个非 nil 错误保留为可检查的错误树。本文说明如何用 errors.Is 判断固定原因、用 errors.As 提取具体错误类型,以及在多个同类分支时递归遍历 Unwrap() []error。
-
用 sync.Mutex 把共享状态的读取、条件判断和写回绑定在同一个临界区,避免并发复合更新中的竞争窗口、丢失更新和状态泄漏。
-
Go 项目要同时支持 Linux、macOS 和 Windows 时,不要手写斜杠或反斜杠。本文用 filepath.Join、ToSlash、FromSlash 和 IsLocal 说明本地路径拼接、格式转换与输入边界的实用写法。
-
Go testing/synctest 怎样让测试等待虚拟时间推进?本文用 bubble、time.Sleep 和 synctest.Wait 拆解虚拟时钟的推进条件,说明如何测试超时与后台 goroutine,以及网络 I/O 为什么不能直接依赖虚拟时间。
-
Go reflect.Value.Equal 适合在反射代码中比较两个 Value:无效值彼此相等,接口值比较内部值,类型不同返回 false;同类型不可比较值会 panic。本文用最小示例说明这些边界和安全写法。
-
Go gzip.Reader.Reset 会丢弃 Reader 的当前状态,并把它重新绑定到新的 gzip 输入。本文用批量解压示例说明 Reset 的调用顺序、错误处理、EOF 与 Close 的边界,以及什么时候复用才有价值。
-
Go io.LimitReader 可以把任意 io.Reader 包装成有字节上限的流。本文用一个小型文本导入工具说明如何消费受限输入、判断是否触达上限、处理底层错误,并比较它与 io.CopyN、http.MaxBytesReader 的使用边界。
-
用 Go net/http 提供静态文件时,http.FileServer 不会替你决定 Cache-Control。本文通过 handler 包装器区分带 hash 的资源和 HTML 入口,讲清缓存头与条件请求的职责边界。
-
Go 生成 GIF 时,局部帧叠加和 Disposal 选择不当会让旧像素残留。本文解释 DisposalNone、DisposalBackground、DisposalPrevious 的区别,并给出编码与排查方法。
-
Go csv.Reader 的 FieldsPerRecord 为零时会由首条记录确定后续列数。本文比较零值、正数和负数,解释表头、空字段与 ErrFieldCount,并给出读取策略迁移示例。