Go语言技术文章
-
time.Timer.Reset 返回 false 不代表重置失败,它表示定时器在调用前已经到期或停止。本文按活动、到期、停止三种状态,说明 Go 1.23 及以上与旧版本的重新安排写法。446 收藏 -
Go 解析不带时区的日期时间文本时,time.Parse 会按 UTC 解释,time.ParseInLocation 会按传入 Location 解释。本文用对比代码说明选择方法、Zone 判断和输入边界。132 收藏 -
动态轮询任务需要调整周期时,活跃的 time.Ticker 直接调用 Reset;真正暂停后恢复则重新创建 ticker。本文结合控制消息说明 Stop、Reset 与 C 通道的生命周期边界,以及如何避免重复 ticker 和错误等待。392 收藏 -
Go 中要在文件已存在时拒绝覆盖,应把 os.O_CREATE 与 os.O_EXCL 一起传给 os.OpenFile。本文说明返回错误的判断方式、先 Stat 再 Create 的竞态,以及权限和关闭句柄时的边界。404 收藏 -
Go os.Getenv 在变量未设置和已设置为空字符串时都会返回空字符串;os.LookupEnv 通过第二个布尔值保留存在性信息。本文用配置流水线说明两者的判断边界、默认值策略和错误处理写法。373 收藏 -
Go embed.FS 提供内嵌文件树,但文件系统根和 HTTP 公开前缀是两层路径。本文用 fs.Sub、http.FS、http.FileServer 与 StripPrefix,把 web/index.html 稳定挂到 /assets/index.html,并说明尾斜杠、目录索引和暴露边界。312 收藏 -
Go fs.WalkDir 会在读取目录前先调用 WalkDirFunc。本文用最小可用代码说明如何返回 fs.SkipDir 跳过当前目录、用 fs.SkipAll 停止剩余遍历,并处理 err、根目录和普通错误边界。464 收藏 -
Go hex.Dumper 的 Write 可能在输出行头、字节区或整行收尾时遇到底层 Writer 错误,而不足 16 字节的尾行要等 Close 才补齐。本文给出保留首个错误、正确处理 Close 并明确资源关闭责任的写法。297 收藏 -
Go csv.Writer 的 Write 返回 nil 不代表整份 CSV 已完成输出。本文给出 Write、Flush、Error 的最小写法、WriteAll 变体和失败目标示例,说明成功判断的时机与底层目标边界。394 收藏 -
用 Go fs.Sub 从 embed.FS 派生独立子文件系统,说明路径映射、HTTP 静态服务、目录缺失检查和安全边界。382 收藏 -
Go base64.NewEncoder 写入成功不代表尾部已输出。文章解释三字节分组与尾部缓冲,给出检查 Copy、Close 错误的封装,区分编码器、缓冲层与文件收尾,并补充尾部长度测试与无填充编码边界。275 收藏 -
Go csv.Reader 开启 ReuseRecord 后,Read 返回的记录切片可能复用上一轮的底层数组。本文用一个导入场景说明覆盖原因,并给出立即消费、复制保存和异步传递时的选择方法。102 收藏 -
Go 的 pem.Block.Headers 用 map[string]string 表示 PEM 外层的可选键值头部。本文通过 Encode 和 Decode 示例说明如何保存、读取自定义元数据,并处理空头部、重复键和编码失败等边界。346 收藏 -
Go net/mail.Address.String 会把显示名按邮件地址语法重新格式化。本文解释可打印 ASCII 名称为何使用 quoted-string、非 ASCII 名称为何走 RFC 2047 编码,并给出生成和解析邮件头时的正确用法。280 收藏 -
同一个 gob.Decoder 可以连续读取一条流里的多个值,只有下一次 Decode 返回 io.EOF 才表示正常读完。本文从一次成功误判结束的故障现场出发,说明编码、循环读取、错误分层和截断流处理。187 收藏