Go教程技术文章
-
Go slices.Sorted 可以把 iter.Seq 中的有序元素收集成新的排序切片,适合整理 map 键、迭代器结果和需要稳定输出的集合。本文说明最小写法、复制边界、空输入、重复值以及 SortedFunc 与原地排序的选择。234 收藏 -
go-vcard 用 Card 表示一张联系人卡片,多个电话号码应作为同名 TEL 字段追加保存。本文演示 AddValue 与带 Params 的 Add 写法,并说明 SetValue 为什么会覆盖已有号码。234 收藏 -
Go container/heap 修改优先队列元素后,不需要先 Remove 再 Push。维护 Item.index,在修改 priority 后调用 heap.Fix,就能以 O(log n) 恢复堆序;本文同时说明 Swap、出队和失效索引的边界。234 收藏 -
Go ast.IsExported 只判断名称的首个 Unicode 字符是否为大写字母。本文说明如何在 AST 遍历中读取 ast.Ident.Name,比较包函数、节点方法与 token.IsExported,并梳理空名称、非法输入、Unicode 和类型可见性的边界。234 收藏 -
Go 的 HTTP gzip 压缩不是给所有响应直接套一层 Writer,而是先协商 Accept-Encoding,再在首次写响应前设置 Content-Encoding 和 Vary,并正确关闭 gzip.Writer。233 收藏 -
Go 表驱动测试中,把资源创建放进 t.Run,临时目录交给 t.TempDir,其他连接和文件用 t.Cleanup 注册回收,就能隔离用例并正确处理失败、跳过和并行子测试。233 收藏 -
Go 命令行表格不要手工补空格,使用 text/tabwriter 把每列写成制表符终止的单元格,再调用 Flush 输出。本文说明 NewWriter 参数、尾部制表符、中文宽度和适用边界。233 收藏 -
Go 1.22 之后,ServeMux 不按注册先后决定路由,而是比较方法、主机和路径对应的请求集合。本文用字面量、单段通配符、尾部通配符和方法模式说明什么叫更具体,为什么有些模式会在注册时直接冲突。233 收藏 -
Go 的 gzip.Reader 默认会把多个 gzip 成员拼成一条解压流。需要逐个识别成员结尾时,应关闭 Multistream,在单成员读取到 io.EOF 后用 Reset 判断下一个成员,并区分正常结束、截断和校验错误。233 收藏 -
用 S ~[]E 接收普通或命名切片,再通过 func(E) R 做逐元素转换;同时说明数值类型参数可以显式转换,但 []E 不能整体隐式变成 []R。233 收藏 -
多层 bufio.Writer 中,外层 Flush 只会把缓存交给下一层;本文用 Buffered、底层写入计数和 Sync 区分每一层的状态,避免误判数据已经到达文件或已经落盘。233 收藏 -
讲清 Go bufio.Reader.ReadSlice 遇到超长行时的 ErrBufferFull 语义、切片生命周期与分片处理方法,并加入单行上限、换行符和 EOF 策略。233 收藏 -
区分 Go defer 普通参数的登记时求值与匿名闭包的延后读取,说明变量变化、资源清理和命名返回值修改应该如何设计。233 收藏 -
Go regexp 默认采用左优先匹配;如果同一起点有多个候选并希望优先拿到更长结果,可以在共享使用前调用 Regexp.Longest。本文用最小示例对比默认模式、Longest 与 CompilePOSIX 的边界。233 收藏 -
Go httputil.DumpRequestOut 能把客户端请求按接近线路的形式导出,并包含 Transport 追加的请求头。本文用请求副本和固定字段脱敏,解决调试请求头时泄露 Authorization、Cookie 等敏感值的问题。233 收藏