Go教程技术文章
-
Go 1.23 的 maps.Keys 返回 iter.Seq 而不是切片。本文演示如何用计数和 break 获取任意前 N 个键,何时必须排序保证稳定顺序,以及如何封装可组合的 Take 迭代器。364 收藏 -
Go slices.Clip 会把切片容量收紧到长度,但不会复制元素或立即释放底层数组。本文从三索引切片、append 隔离、长期持有和 Clone 对比四个场景说明什么时候值得调用。263 收藏 -
讲清 Go slices.Delete 删除后 len、cap、尾部清零和底层数组持有之间的区别,并给出 Delete、Clip 与复制收缩的选择方法。241 收藏 -
Go strings.Builder 调用 String 后仍然可以继续写入。本文结合 String、WriteString、Reset、Grow 和非零 Builder 不可复制的限制,说明如何安全复用 Builder。158 收藏 -
复用 bytes.Buffer 时,旧数据残留通常是因为写入会追加而不是覆盖。本文用 Len、Cap、Reset 和 Grow 拆开逻辑长度、底层容量与切片别名,给出循环复用、容量阈值和返回值复制的处理方式。441 收藏 -
Go io.MultiWriter 会按顺序把同一份数据写入多个 Writer,遇到首个错误或短写就停止,不能把多目标写入当成事务;本文用示例说明如何识别部分成功并设计补偿策略。372 收藏 -
用 Go 的 io.TeeReader 把请求体读取和 SHA-256 摘要计算接在同一条流上,说明 io.Copy、Sum 调用时机,以及绕过包装 Reader 时的常见错误。476 收藏 -
Go 将 JSON 解码到 map[string]any 时,数字默认进入 float64,可能破坏大整数精度。本文用 Decoder.UseNumber 保留 json.Number,并说明何时使用 Int64、Float64、String 或结构体字段。201 收藏 -
Go 接收多种 JSON 事件时,可用 json.RawMessage 保留 payload,先解析 type,再把内容交给对应结构,避免 map[string]any 带来的类型断言和扩展混乱。376 收藏 -
讲清 Go json.Decoder 读取连续 JSON 值时如何区分正常 EOF、记录中途截断、语法错误和类型错误,并用 InputOffset 记录可恢复的失败位置。495 收藏 -
Go 的 encoding/csv 支持把引号字段中的换行保留为同一条记录。本文说明正确的 CSV 写法、csv.Reader 的读取方式、字段数配置,以及如何用 ParseError、FieldPos 和 InputOffset 定位坏数据。434 收藏 -
用 Go 逐行解析简单配置文本:统一换行,跳过空行和整行注释,用 strings.Cut 保留值中的等号,并为格式错误与重复键返回行号。309 收藏 -
Go bufio.Scanner 读取超长行时,关键是在第一次 Scan 前调用 Buffer 设置初始缓冲区和最大 token 大小,并为换行符预留空间;如果行长不可控或需要恢复,则应改用 bufio.Reader。100 收藏 -
Go 动态查询不知道列数时,用 Columns 创建接收槽位,以 *any 安全处理普通值与 NULL,再结合 ColumnTypes 和 rows.Err 完成通用扫描。328 收藏 -
Go 的 Rows.ColumnTypes 不直接返回 nil 长度,ColumnType.Length 返回 int64 与 ok。本文区分固定长度、无界类型、驱动不支持和业务包装层 nil,并说明如何把长度元数据与 SQL NULL 分开处理。128 收藏