Go语言技术文章
-
Go 中读取 GOMAXPROCS 当前值时,直接调用 runtime.GOMAXPROCS(0) 即可。本文说明它为什么不会修改设置、默认值从哪里来,以及如何把结果用于启动诊断。200 收藏 -
Go 的 json.RawMessage 适合处理外层结构固定、内层字段动态的 JSON。本文说明怎样先保留未知 payload,再按 kind 延迟解码,并在修改外层字段后通过二次 Marshal 保留原始 JSON 值,同时区分字段缺失、null、空对象和非法 JSON。200 收藏 -
Go OpenFile 追加写仍覆盖文件,通常不是 Write 本身失效,而是 flags 中混入 O_TRUNC、实际使用了 os.Create,或每次循环重新打开文件。本文按现象排查 flags、打开生命周期、Seek 与 WriteAt,给出可直接改造的追加写法。200 收藏 -
讲清 Go regexp.ExpandString 如何消费 FindSubmatchIndex 的匹配区间,用命名捕获组生成替换文本,并处理模板歧义、未匹配组和追加缓冲区。200 收藏 -
Go 1.23 新增的 unique.Make 可以把 comparable 值转换成可比较的 Handle,同值输入得到相等句柄。本文从触发信号、最小写法、Value 浅拷贝和边界处理说明怎样使用它,不把唯一化误当成通用缓存。200 收藏 -
使用 go-ini 读取 INI 时,可以用嵌套结构体上的 ini 标签对应节名,再用字段标签对应键名;本文给出 MapTo、StrictMapTo、类型转换和常见排查边界。200 收藏 -
Go oggvorbis 可以从任意 io.Reader 解码,但 Length、Position 和 SetPosition 依赖底层 io.Seeker。本文对比流式输入与可定位输入,解释 Read 返回值、样本单位和 ReadAll 的内存边界。200 收藏 -
KSUID默认生成方式使用秒级时间戳,同秒排序由随机载荷决定。本文用确定性构造解释比较结果,给出独立业务序号的排序示例,并说明游标兼容、时钟与Sequence的适用边界。200 收藏 -
Go snowflake 生成的编号可以恢复出节点号和同一毫秒内的序列值。本文从字符串与 int64 两种输入开始,说明 Node、Step、默认位布局、自定义位宽以及弃用 API 的维护边界。200 收藏 -
Go roaring 默认使用无符号32位整数,roaring64 提供64位扩展。本文从编号范围、跨语言格式、序列化和接口边界比较两者,给出实际选型规则。200 收藏 -
Go os.Args 判断缺少命令参数时,应先检查 len(os.Args) 是否小于所需参数数量,再访问对应下标。本文说明程序名与位置参数的关系,区分缺少参数和空字符串,并介绍何时交给 flag 解析选项。200 收藏 -
os.Root.WriteFile 适合直接写入并允许覆盖;如果业务要求目标已存在就失败,应改用 Root.OpenFile 加 O_CREATE|O_EXCL,再用 errors.Is 判断 os.ErrExist。本文还说明 Root 相对路径、父目录、权限位和 Close 错误的处理边界。200 收藏 -
strconv.ParseInt 不返回空数值。本文解释语法错误、越界和零值的区别,用 Go 状态模型保留输入原文,并处理表单空态、错误提示与固定整数范围。200 收藏 -
Go 的 archive/zip 提供 OpenReader 和 NewReader 两种读取入口。本文从逐项遍历 ZIP 条目开始,说明怎样区分目录、打开文件内容、限制读取范围并处理关闭和读取错误,最后封装一个可复用的读取函数。200 收藏 -
Go encoding/csv 的 Write 主要负责把记录编码到缓冲区,Flush 才尝试把缓冲数据交给底层 io.Writer;因此导出结束后还必须检查 Writer.Error,才能发现刷新阶段才暴露的写入失败。本文按 Write、Flush、Error 的顺序给出稳妥写法。200 收藏