Go语言技术文章
-
Go debug/dwarf 的 LineReader 可以用 Tell 保存当前行表位置,再用同一个 LineReader 调用 Seek 恢复。本文用一个紧凑示例说明保存时机、继续读取方式,以及 LineReaderPos 不能跨行表复用的边界。371 收藏 -
Go time.Date 遇到夏令时回拨时,同一个本地墙上时间可能对应两个实际时刻。本文说明 Date 的不确定性,并用 Time.Equal、UTC、Unix 秒和明确偏移建立可靠的判断与存储方式。343 收藏 -
用 Go 更新配置或索引文件时,临时文件写完并不等于断电后一定存在。本文按写入、文件 Sync、Rename 和目录项持久化拆开说明,给出可复用的安全替换模板与跨平台边界。499 收藏 -
Go 的 os.File.Truncate 只改变文件长度,不会自动调整当前 I/O 偏移。本文用代码拆开 Truncate、Seek、Write 和 WriteAt 的职责,解决截断后 EOF、追加和固定位置覆盖的常见误判。267 收藏 -
Go 的 csv.Writer 默认使用 LF;面向依赖 CRLF 的 Windows 工具导出时,应在第一次写入前设置 UseCRLF=true,并在 Flush 后检查 Error。本文拆开换行、缓冲和错误边界。345 收藏 -
用 Go 的 big.Rat.FloatPrec 判断分数能否精确写成有限小数,读懂 n 与 exact 的含义,并处理 FloatString 的舍入边界。203 收藏 -
xml.Encoder 的 Indent 会按元素嵌套深度插入换行和缩进。本文说明 prefix、indent 的区别,以及 EncodeToken 场景下 Flush、Close 的收尾边界,帮助你稳定生成可读的流式 XML。205 收藏 -
Go XML Strict=false 只适合来源明确、缺陷可解释的兼容导入。说明缺失结束标签与未知实体的处理,区分 Strict、Entity、AutoClose 的职责,并给出独立输入流的完整 Token 比较示例。362 收藏 -
filepath.Localize 先检查 io/fs.ValidPath,再检查目标操作系统能否表示路径。本文拆解空元素、点路径、反斜杠、冒号、NUL 与 Windows 保留名等错误边界,并给出可执行的排查顺序。108 收藏 -
slices.Clip 会把切片容量收紧到长度,让后续 append 无法复用原切片的容量尾部;本文解释它与三下标切片、slices.Clone 的区别,以及共享元素和并发边界。294 收藏 -
maps.Keys 返回的是可迭代的键序列,不是现成切片。本文用 Go 1.23 的 range 语法收集 map 键,说明 nil map 与空 map 的结果,并提醒 map 键的迭代顺序不能当成稳定排序。177 收藏 -
maps.EqualFunc 先比较两个 map 的长度,再按键查找并调用自定义值比较函数,所以 nil map 与空 map 都因长度为 0 而返回 true。本文拆解源码规则,给出最小示例,并说明如何在业务上区分 nil 与空。187 收藏 -
Go flag.FlagSet 使用 ContinueOnError 后,Parse 会返回帮助请求或参数解析错误。本文说明如何用 SetOutput 捕获默认输出、用 errors.Is 区分 flag.ErrHelp,并自定义 Usage 处理子命令和测试场景。501 收藏 -
Go flag.BoolFunc 每次遇到开关都会回调。通过 ParseBool 与局部累计对象保留重复布尔值,区分出现次数、真值次数和最后状态,并说明显式 false、解析错误与状态重用的边界。340 收藏 -
Go 的 exec.Cmd.Env 遇到同名环境变量时,最终采用切片中最后出现的值。本文区分 nil 继承、显式环境、Cmd.Environ 追加覆盖、空值与 Windows 特殊边界,给出可直接套用的构造方式。305 收藏