Go语言技术文章
-
Go 的 debug/elf.File.Section 用节区名称查找 ELF 中的单个 Section,找不到时返回 nil。本文从打开文件、按名称定位、读取元数据与内容几个环节说明 Data 和 Open 的区别,并补充 SHT_NOBITS 与压缩节区的边界。432 收藏 -
Go WaitGroup 出现 negative WaitGroup counter 通常是 Done 重复调用、Add 与 Wait 时序错误或批次复用不当。本文用最小示例、排查清单和安全写法定位计数失衡。432 收藏 -
errors.Join 本身会为非 nil 错误建立 joinError 和精确容量的错误切片。本文说明如何在调用方预分配并复用收集空间、把 Join 推迟到边界、避免循环内重复格式化,并区分可减少的临时分配与不可省略的聚合成本。432 收藏 -
Go io.ReadFull 用 n 和 err 表示固定长度读取是否完成:空读到 EOF、部分读取到 ErrUnexpectedEOF,以及底层读取错误需要分开处理。本文给出稳定的判别代码和协议头读取边界。432 收藏 -
围绕 Go slices.Collect 讲清 iter.Seq 到 []E 的收集方式、空输入的 nil 结果、浅拷贝边界和错误保留方案。432 收藏 -
mime.WordDecoder 遇到非内置字符集时,关键不是重写邮件头解析,而是让 CharsetReader 把指定字符集的字节 Reader 转成 UTF-8。本文从故障表现、回调输入到 Windows-1252 接入,说明 DecodeHeader 的错误边界与回归检查点。432 收藏 -
fmt.Appendf 可以把错误的可读文本追加到 []byte,但不能像 fmt.Errorf 的 %w 那样保留可追踪的错误链。本文用日志、协议缓冲和 Writer 场景说明两者如何配合。431 收藏 -
Go os.Lstat 只返回目录项元数据,不会像 os.Open 那样返回需要 Close 的文件对象。遇到资源没有释放时,应沿调用链检查目录迭代器、打开的文件、外部命令和管道,并保留 Lstat 的原始错误链。430 收藏 -
Go unicode.ToTitle 接收一个 rune 并返回对应的 Unicode 标题大小写形式。本文从 ToUpper、ToLower 的差异讲到 UTF-8 字节与 rune 的边界,给出可复用的逐 rune 转换写法。430 收藏 -
iter.Pull 不负责管理调用方的缓冲区。本文用 dst[:0] 保留 slice 容量,演示如何逐项拉取、提前停止和处理切片别名,并说明何时直接使用 slices.AppendSeq。429 收藏 -
按 QueryContext、Next、Scan、Err 和 Close 定位 sql.Rows 使用问题,说明空结果、NULL 扫描、提前停止及连接池生命周期,并给出完整消费函数。429 收藏 -
Golang · Go问答 | 5天前 | 标准库 · 错误处理 · 文件读取 · Go问答 · 排错 · Go bufio.Scanner errors.Is errors.As ErrTooLong Scanner.Err 文本读取
bufio.Scanner 的 Scan 返回 false 不一定代表读取失败,io.EOF 会被 Err 隐藏为 nil。本文按 Reader、SplitFunc 和缓冲区三类来源拆分错误,并用 errors.Is、errors.As 识别哨兵错误、PathError 与 ErrTooLong。428 收藏 -
ScanComments 负责识别注释,SkipComments 决定识别后是否跳过。本文用一个小型 text/scanner 工具说明两者组合,并区分 go/scanner 的 API 边界。428 收藏 -
Go log/slog.Logger 记录错误时要给 error 一个稳定的属性名,并补充操作和资源上下文。本文说明 !BADKEY 的原因、TextHandler 与 JSONHandler 的呈现边界,以及用 LogValuer 输出结构化错误字段的方法。428 收藏 -
filepath.WalkDir 不提供接管内部目录读取缓冲的参数,但可以复用调用方已有的 []string 容量保存重复扫描结果。本文给出可重用写法,并说明回调直处理、错误返回和切片生命周期边界。427 收藏