Go语言技术文章
-
required_if 比较其他字段是否等于指定值,required_with 则在任一关联字段有值时触发必填。本文用生产请求结构体说明两者的触发条件、零值判断、多条件写法和发布检查边界。382 收藏 -
Go Validator 的 omitempty 会先判断字段是否为空,空值会直接跳过 min、gte 等后续规则。本文用最小结构体说明字符串、数字、指针和集合的边界,并比较 omitnil 与 omitzero 的选择。403 收藏 -
Squirrel 的 SelectBuilder 采用不可变 builder 语义,Where、OrderBy 等方法返回新值。本文说明为什么必须接收链式返回值,并给出基础查询、状态条件和排序分页的复用写法。363 收藏 -
Squirrel 的 Eq 遇到空切片时不会生成普通等号或 IN 空列表,而会生成恒假条件 1=0;NotEq 对应 1=1。本文说明空集合、SQL NULL、Where/Or 组合与跳过过滤之间的边界。377 收藏 -
用 Go SQLX 查询一列多行数据时,可以直接用 Select 填充 []string;结果较大或需要处理 NULL 时,再用 Queryx 手动遍历并检查 rows.Err()。169 收藏 -
Squirrel 将 []byte 视为单个数据库参数,而 byte 是 uint8 的别名,因此 []uint8 也不会自动展开为 IN。通过二进制值与数字集合示例,说明显式转换、空集合和参数绑定的边界。199 收藏 -
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 收藏