Go语言技术文章
-
Go Cron 的 Remove 只移除未来调度,不会强行终止已经启动的 goroutine。本文拆开 Entry、调度器和任务执行边界,并给出用 context 主动取消任务的写法。300 收藏 -
Go Cron 同时设置日字段和星期字段时,不一定是两个条件都满足:robfig/cron/v3 在两者都为具体限制时按或匹配;使用 ? 留空其中一个字段,才适合表达只按日期或只按星期限制。329 收藏 -
robfig/cron/v3 默认采用分钟开头的五段规则。本文说明 WithSeconds 六段秒制、SecondOptional 兼容模式及 ParseStandard 的区别,并给出处理注册错误和停止调度的完整示例。494 收藏 -
Go Humanize 的 Bytes 和 IBytes 适合把字节数转成可读文本,但文本排序会受数字位数和单位影响。正确做法是保留原始字节数按数值排序,旧字符串则先用 ParseBytes 转回统一数值。422 收藏 -
Go Humanize 的 Time 适合把时间点转成“几秒前”“几分钟后”等相对描述,不适合作为精确倒计时的数值来源。本文用 deadline、time.Until 和独立刷新策略说明展示文本与计时逻辑的分工。446 收藏 -
Go Humanize 的 Bytes 使用 1000 进位并输出 kB、MB,IBytes 使用 1024 进位并输出 KiB、MiB。本文用同一输入解释两者的差异、舍入规则和 N 变体选择,避免容量日志与接口展示混用单位体系。402 收藏 -
Go UUID 的 NewSHA1 会把命名空间 UUID 和名称字节一起计算为 UUID v5。同一个名称换了命名空间,输入域就变了,因此得到不同标识。本文说明固定命名空间、稳定编码和迁移边界。496 收藏 -
Go google/uuid 的 Validate 只返回格式判断结果,Parse 则解码得到 UUID 值。结合严格36位小写接口示例,区分兼容格式、规范化、零值策略、版本要求与资源权限。397 收藏 -
Go UUID 的 Parse 接受 32 位不带连字符的十六进制文本,是因为它同时兼容 raw hex 等非标准表示。本文解释 Parse 的输入边界,并说明接口严格校验时如何把宽松解析与业务格式规则分开。389 收藏 -
shopspring/decimal 的 MarshalJSONWithoutQuotes 是包级全局开关,开启后所有 Decimal 的 JSON 输出都会从字符串变成数字。本文说明它的影响范围、并发修改风险,以及如何用字段级 MarshalJSON 控制单个接口。476 收藏 -
Decimal.Equal 按数值比较,结构体 == 则比较 Decimal 的字段表示和其它字段。本文结合 *big.Int 指针、指数、零值与业务对象,说明如何排查相同金额比较失败,并给出 Equal、Cmp 和结构体比较的选择边界。138 收藏 -
Go Flock 的 Locked() 只反映当前 Flock 实例,不能代表其他进程是否持有同一路径的文件锁。本文用实例边界、TryLock 竞争、Unlock 生命周期和 Stat 元数据说明正确判断方式。229 收藏 -
Go Decimal 无法恢复进入 float64 前已丢失的十进制尾数和输入格式。通过相邻长小数示例区分浮点往返表示与原始输入,并说明字符串、整数系数入口及舍入策略的适用边界。397 收藏 -
解释 Go Flock 为什么不应在持锁期间删除锁文件:锁依附于已打开的文件对象,删除路径后后续进程可能打开新对象,从而绕过原来的互斥;文中给出安全释放和清理建议。249 收藏 -
Go Flock 的锁文件是协作路径,不是占用状态本身。本文区分磁盘文件、内核锁和 Flock 实例,说明 Unlock、Locked、TryLock、Stat 的用途,以及异常退出和跨平台场景下的判断边界。403 收藏