Go语言技术文章
-
Go 的 archive/zip 不把操作系统路径直接当作 ZIP 路径使用。本文从相对路径、正斜杠、目录尾斜杠和 Writer.Close 四个边界出发,写一个可复用的 ZIP 构建示例,避免目录条目错位、穿越路径和重复名称。493 收藏 -
讲清 Go slices.Grow 的额外容量参数、返回值和循环位置:按预计总数计算剩余数量,在 append 前一次预留,避免把容量误当长度。250 收藏 -
使用 Go archive/zip 的 FileHeader.Modified 和 Writer.CreateHeader 设置 ZIP 条目的修改时间,并处理 UTC 转换与传统 ZIP 时间精度差异。131 收藏 -
slices.Clip 会把切片容量收紧到长度,适合在函数边界阻止下游 append 写入隐藏尾部,但它不复制元素,也不保证释放仍被引用的大底层数组。本文对比 Clip、三索引切片与复制方案。181 收藏 -
Go 标准库 archive/zip 可以通过 Reader.File 遍历压缩包条目,使用 Name 读取文件名,使用 UncompressedSize64 和 CompressedSize64 获取 ZIP64 兼容的大小信息。本文补全目录项、路径安全、资源关闭和生产检查边界。280 收藏 -
Go 方法值创建时会保存接收者。指针接收者保存的是指针副本,调用时仍能沿指针修改原对象;值接收者保存的是结构体副本,后续变化不会回写。340 收藏 -
Go 的 csv.Reader 开启 ReuseRecord 后,Read 返回的记录可能共享底层数组。本文解释上一条记录被改写的原因,并给出即时处理、复制保存和 EOF 错误处理的安全写法。433 收藏 -
Go nil 接收者调用方法不一定会 panic,关键要区分 nil 指针、nil 接口以及方法体是否发生字段解引用。本文用最小示例和检查表定位真实的 panic 边界。309 收藏 -
Go 解析带引号换行的 CSV 字段时,不要先按换行符切分;使用 encoding/csv 的 Reader 按完整记录读取,再处理字段数和 ParseError。139 收藏 -
Go 中 T 与 *T 的方法集并不相同:值接收者方法同时属于 T 和 *T,指针接收者方法只属于 *T。本文用最小示例解释接口赋值失败、自动取址边界与实现选择。394 收藏 -
Go encoding/csv 默认会检查每条记录的列数。不齐列数据要保留时,可将 FieldsPerRecord 设为 -1,再在 Read 循环中按表头长度标记、补齐并审计异常记录。203 收藏 -
Go 1.20 起 fmt.Errorf 支持多个 %w,可把多个底层错误保留为可遍历分支。本文对比单错误链、多错误包装与 errors.Join 的边界,并给出 errors.Is、errors.As、go.mod 和 CI 的迁移检查清单。342 收藏 -
Go 使用 bufio.Writer 写文件时,Write 可能只把数据放入内存缓冲区。本文解释 Flush、Close 与 File.Sync 的职责边界,给出正确的错误处理顺序和文件写入结束清单。420 收藏 -
Go errors.As 匹配自定义错误时,目标变量的值类型、指针类型和地址层级必须与错误的动态类型一致。本文用包装错误示例说明为什么拿不到值,以及如何排查 nil 指针和类型错配。418 收藏 -
Go 使用 bufio.Reader 逐行读取时,ReadString 和 ReadBytes 会保留换行分隔符;本文对比 ReadLine、Scanner,并给出正确处理 CRLF 与 EOF 最后一行的写法。498 收藏