Go语言技术文章
-
Go gzip.Writer 的 Name、ModTime、Comment 等字段会写入 gzip 文件头,但必须在第一次 Write、Flush 或 Close 之前设置。本文给出最小写法,并说明复用 Writer、读回元数据和字段边界。262 收藏 -
用 go test -cover 建立按包基线,再用 coverprofile 与 go tool cover 定位函数盲区,并区分默认包内统计和 -coverpkg 跨包统计。262 收藏 -
Go 使用 slices.Delete 原地删除切片区间,并在 Go 1.22 及以后清空废弃尾部的元素引用。本文说明半开区间、返回长度、别名共享、批量删除和需要保留输入时的复制边界。262 收藏 -
Go 无缓冲通道发送和接收必须同时就绪。若同一个 goroutine 先发送再接收,或接收方提前退出,发送与接收就可能一起等待。本文按现场信号区分正常同步、双端阻塞、nil 通道和关闭通道,并给出可退出的修复方式。262 收藏 -
Go 使用 go:embed 报 pattern no matching files 时,重点检查声明文件所在包目录、模式拼写、模块边界和构建标签,而不是运行时工作目录。本文给出一套能定位到具体文件的排查方法。262 收藏 -
Go errors.Join 遍历需同时识别两种 Unwrap 接口,区分包装节点与叶原因;示例加入调用、深度额度,并说明截断记录和不可信方法边界。262 收藏 -
Go 使用 utf8.RuneCountInString 统计 rune,而 len 返回字节数。本文通过中文、emoji 和组合字符说明差异,提供带字节上限、UTF-8 判断及 rune 上限的入口处理示例。262 收藏 -
Go strconv.CanBackquote 用于判断字符串能否原样放入单行反引号字符串。本文解释它会拒绝哪些字符,并给出失败时回退到 strconv.Quote 的实用写法。262 收藏 -
Go go mod edit 一次只处理一个 go.mod 文件。本文用 find 和循环批量修改模块路径,并说明 -print、-json、源码 import、replace 与 v2 主版本后缀的边界。262 收藏 -
io.Copy 把正常 EOF 视为成功结束,零字节复制可以返回 nil。结合临时文件示例,区分空文件、末尾偏移与受限输入,并说明非空判断、复制数量和目标收尾的职责。262 收藏 -
讲清 Go io/fs 中 FileInfo.Mode、ModeDir 与 IsDir 的关系,并比较 DirEntry、Stat、Lstat 在目录类型判断中的使用边界。262 收藏 -
Go 关闭 channel 触发 panic,通常是关闭责任没有收口:nil channel、重复关闭和向已关闭 channel 发送分别对应不同的生命周期错误。本文用发送方所有权、协调者收口和接收端 ok 判断整理排障与迁移边界。262 收藏 -
使用 go-i18n TemplateData 向消息模板传入命名字段,对比 map 与结构体,解释 PluralCount 的独立职责、缺键处理和网页输出转义。262 收藏 -
用 Go uniseg 的 Graphemes.LineBreak 判断每个 grapheme cluster 后面是禁止、可选还是必须换行,并说明何时应改用 FirstLineSegmentInString。262 收藏 -
Go 升级后 bufio.Scanner 的分行结果、token 数量或错误表现发生变化时,先固定工具链和输入,再核对 SplitFunc、Buffer、Bytes 生命周期与 Err 结果,避免把输入边界误判为版本回归。262 收藏