Go教程技术文章
-
Go bytes.Reader 同时支持顺序读取、绝对偏移读取和定位。本文区分 Len、Size、ReadAt、Seek 的职责,并用 io.SectionReader 固定下游可见的缓冲区间。465 收藏 -
Go 1.27 针对小对象的专用内存分配器可降低分配成本,但它不会替服务端回收仍被引用的对象。本文用请求缓冲、缓存切片和 goroutine 三个边界,说明如何判断分配变快与对象活得过久是两件事。463 收藏 -
Go HTTP 接口不必启动真实端口就能测试。本文用 httptest.NewRequest 和 httptest.NewRecorder 构造 Handler 的输入输出,再分别断言请求参数、方法、状态码、响应头和正文,并说明 Handler 单元测试与真实服务器测试的边界。463 收藏 -
Go 的 utf8.DecodeLastRuneInString 处理空字符串时返回 RuneError 和 size=0。本文用返回值对照、UTF-8 多字节裁剪示例,区分空输入、合法 U+FFFD 与非法尾字节。463 收藏 -
通过包装 tls.ClientSessionCache 记录 Get、Put 与命中,再用 ConnectionState.DidResume 区分缓存命中、TCP 连接复用和真正的 TLS 会话恢复。463 收藏 -
依赖升级后版本仍不如预期,通常不是 go get 失效,而是 MVS 按完整模块图计算了 build list。本文用三组 Go 命令定位谁抬高了版本,并处理 replace、exclude 与工作区边界。462 收藏 -
sync.Pool 适合复用可丢弃的临时缓冲区,而不是业务状态或必须长期保留的资源。本文用 bytes.Buffer 和 []byte 说明 Reset、归还时机、异常容量清理与收益判断。462 收藏 -
Go 测试里临时目录、数据库连接和环境变量如果没有按作用域清理,单测会出现串状态和偶发失败。本文用 testing.T.Cleanup 对比 defer、子测试和失败路径,给出资源注册顺序与验收清单。461 收藏 -
解释 Go html/template 为什么会对 URL 查询参数和路径片段做上下文转义,并区分正常百分号编码与不安全协议导致的 #ZgotmplZ。461 收藏 -
Go 1.22 扩展了 net/http ServeMux 的方法和通配符模式。本文用一张资源路由表说明如何组合 GET、POST、DELETE,判断模式覆盖关系,避免注册期冲突,并处理 PathValue、尾斜杠和旧版本兼容边界。460 收藏 -
filepath.WalkDir 的错误不只来自文件本身。本文按根路径、目录读取和子项回调三类入口,讲清 d 为 nil、SkipDir 与 SkipAll 的处理边界。460 收藏 -
从一个需要同时排序整数、字符串和业务结构体的场景出发,拆解 Go 泛型约束、比较器和类型集合的组合方式,给出可编译的最小实现、边界判断与测试方法。459 收藏 -
用 encoding/binary 按协议选择 BigEndian 或 LittleEndian,正确读写固定宽度整数,区分结构体布局、切片边界和 Uvarint 变长编码。459 收藏 -
Go 的 bufio.Reader.Peek 只查看缓冲区中的下一个字节窗口,不会推进读取游标,所以后续 Read 仍可能读到同样内容。本文解释缓冲区填充、消费位置、切片有效期,以及 Read、Discard 和 Peek 的正确配合。459 收藏 -
读取数十万文件的目录时,os.ReadDir 的排序语义和一次性返回 []os.DirEntry 会同时影响内存与响应时间。本文从目录扫描小工具出发,比较 ReadDir 与 File.ReadDir 的边界,并给出保留排序、改为分批遍历和验收内存的实现方法。458 收藏