-
Go 中比较客户端 MAC 和服务端期望值时,应先统一为原始字节,再使用 crypto/hmac.Equal。本文从 hmac.New 计算、长度语义、十六进制解码和常见误区四个方面说明签名结果怎样安全比较。
-
用 Go 的 container/heap 实现优先级任务队列,讲清 heap.Interface、最小堆方向、任务入队出队、优先级更新和空队列边界。
-
Go archive/tar.Writer.Flush 不是刷新任意缓冲,而是为已经完整写入的当前文件条目补齐 tar 块填充。本文用两个条目的示例说明 Header.Size、Write、Flush、WriteHeader 与 Close 的关系,以及遗漏字节和底层写入错误的处理边界。
-
用 Go crypto/sha3.New256 复用 SHA3-256 哈希对象,讲清 Write、Sum、Reset 的边界、批量摘要中的清理顺序,以及 sync.Pool 归还对象时怎样避免串状态。
-
Go constant.Compare 可以直接比较 constant.Value,不需要先转成 float64。本文用 MakeFromLiteral 构造超出 float64 精确范围的大整数,再说明 LSS、EQL、GTR、Unknown 和近似转换的边界。
-
Go base64.NewEncoder 会暂存不足一个完整分组的输入,必须在读取结果或交给下游前调用 Close 刷新尾部数据;本文用 bytes.Buffer 和 Writer 示例说明 Close、Write 及错误处理边界。
-
用 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 的区别,并给出编码与排查方法。
-
同时读取 Example.Output 与 EmptyOutput,区分显式空输出、未声明输出和非空预期文本。通过带注释的 AST 静态抽取示例,说明记录字段和运行证据的边界。