Go教程技术文章
-
Go filepath.Clean 负责词法归一化,filepath.Rel 负责计算相对路径。本文把两者组合成根目录校验函数,处理 .. 越界、根目录本身、绝对路径和符号链接边界。172 收藏 -
Go 1.25 为 sync.WaitGroup 增加了 Go 方法,把任务计数、goroutine 启动和完成收口组合起来。本文用一个固定任务集合说明 WaitGroup.Go 的最小写法、Wait 调用时机、panic 边界,以及什么时候仍应使用 Add/Done。172 收藏 -
Go iter.Pull2 把 push 风格的 iter.Seq2 转成 next 和 stop 两个函数。本文用提前匹配、错误返回和完整消费三个场景说明为什么要 defer stop,并梳理重复 Stop、零值返回和并发调用边界。172 收藏 -
Go net/url.URL 的临时分配通常来自重复 Parse、查询参数编码和最终字符串输出,而不是 URL 结构体本身。本文用可复用 URL、受控 RawQuery 和 Go 1.24+ 的 AppendBinary 组合,说明如何减少循环中的短命对象,并给出 Clone、JoinPath、String 与基准测试的取舍。172 收藏 -
讲清 sha256.New、io.Copy、hash.Hash.Sum 与 Reset 的组合,处理流式摘要、读取错误和状态复用边界。172 收藏 -
Rows.ColumnTypes 可以在不写死字段结构的情况下读取查询结果的列名、数据库类型、扫描类型以及驱动支持的长度、可空性和小数精度。本文给出动态扫描写法,并说明 ok 标志、驱动差异和资源生命周期。171 收藏 -
Go 解析 CSV 时,record 下标只能说明字段在当前切片中的位置,不能直接定位原始文件。本文演示如何在 Read 成功后使用 encoding/csv.Reader.FieldPos 获得字段起始行号和字节列号,并结合 ParseError、InputOffset 和下标边界生成可排查的错误信息。171 收藏 -
Go 泛型约束可以同时写底层类型集合和接口方法。本文用一个可复用的约束示例说明类型集合、方法集、值接收者与指针接收者之间的边界。171 收藏 -
脚本读取 go.mod 时,不要先写正则拆文本。本文用 go mod edit -json 拿到结构化内容,说明字段范围、单文件边界、脚本消费方式和 Go 工具的错误处理。171 收藏 -
解释 Go bufio.Writer.AvailableBuffer 返回切片的有效期,说明 append 后立即 Write 的正确用法、下一次写操作的失效边界,以及容量不足和 Flush 错误的处理方式。171 收藏 -
Go io.LimitReader 适合限制可选字段本次最多读取的字节数,但它不会自动判断字段是否完整。本文用存在标记和长度前缀示例,说明如何配合 io.ReadFull 处理字段不存在、长度超限和 io.ErrUnexpectedEOF。171 收藏 -
通过Go标准库构建tarpack小项目,逐条流式归档普通文件,复用复制缓冲,说明条目大小、关闭错误、并发与内存边界。171 收藏 -
通过 Visitor 返回值掌握 Go ast.Walk 的深度优先遍历、子树裁剪与 Visit(nil) 退出通知,完成一个跳过函数体的源码分析示例。171 收藏 -
Go x/image/riff 用 NewReader 建立顶层 RIFF 读取器,再用 Reader.Next 逐块读取;遇到 LIST 时通过 NewListReader 递归打开子容器。本文说明 io.EOF、chunkData 生命周期、长度上限和错误处理的实际取舍。170 收藏 -
围绕 Go io.Pipe 的同步读写关系,说明生产者如何用 PipeWriter.CloseWithError 把错误传给消费者,以及读端提前退出时怎样通知写端解除阻塞。170 收藏