发布日期: 2025-12-08
v0.2.2 是一个功能增强版本,validategen 新增了 duration 验证注解系列,支持指针数值类型的比较验证,并将 @method 注解的验证逻辑从 VSCode 插件移至 CLI 工具。
新增三个用于验证 time.Duration 字符串的注解:
验证字符串是有效的 Go duration 格式(如 1h30m、500ms):
// validategen:@validate
type Config struct {
// validategen:@duration
Timeout string // 必须是有效的 duration 格式
}验证 duration 字符串的值不小于指定值:
// validategen:@validate
type Config struct {
// validategen:@duration_min(1s)
Timeout string // 超时时间至少 1 秒
// validategen:@duration_min(100ms)
RetryInterval string // 重试间隔至少 100 毫秒
}验证 duration 字符串的值不大于指定值:
// validategen:@validate
type Config struct {
// validategen:@duration_max(1h)
Timeout string // 超时时间最多 1 小时
// validategen:@duration_max(30s)
RetryInterval string // 重试间隔最多 30 秒
}三个注解可以组合使用,生成的代码会合并为一个代码块,只解析一次:
// validategen:@validate
type Config struct {
// validategen:@duration
// validategen:@duration_min(1s)
// validategen:@duration_max(1h)
RetryInterval string // 有效 duration,范围 1s ~ 1h
}生成的代码(优化后):
if x.RetryInterval != "" {
if _dur, _err := time.ParseDuration(x.RetryInterval); _err != nil {
errs = append(errs, fmt.Sprintf("RetryInterval must be a valid duration..."))
} else {
if _dur < 1000000000 {
errs = append(errs, fmt.Sprintf("RetryInterval must be at least 1s..."))
}
if _dur > 3600000000000 {
errs = append(errs, fmt.Sprintf("RetryInterval must be at most 1h..."))
}
}
}| 注解 | Mean (1000次) | 单次约 |
|---|---|---|
@duration (valid) |
25.45µs | 25.45ns |
@duration (invalid) |
67.56µs | 67.56ns |
@duration_min |
11.78µs | 11.78ns |
@duration_max |
~11µs | ~11ns |
| 组合使用 | ~11µs | ~11ns |
@min、@max、@gt、@gte、@lt、@lte、@eq、@ne 等比较注解现在支持指针数值类型:
// validategen:@validate
type Config struct {
// validategen:@min(1)
// validategen:@max(65535)
Port *int // 可选端口,非 nil 时验证范围
// validategen:@gte(0)
Timeout *float64 // 可选超时,非 nil 时验证 >= 0
}生成的代码:
if x.Port != nil {
if *x.Port < 1 {
errs = append(errs, "Port must be at least 1...")
}
if *x.Port > 65535 {
errs = append(errs, "Port must be at most 65535...")
}
}@method 注解的参数验证从 VSCode 插件移至 CLI 工具,提供更准确的编译时检查:
- 验证方法是否存在于目标类型上
- 验证方法签名是否正确(无参数,返回
error) - 提供清晰的错误信息和位置
| 错误码 | 说明 |
|---|---|
| E010 | 方法不存在 |
| E011 | 方法签名不正确 |
- README.md / README_EN.md 新增 duration 验证注解文档
- 更新注解速查表
- 添加 duration 基准测试结果
直接升级即可,无破坏性变更:
go install github.com/tlipoca9/devgen/cmd/devgen@v0.2.2如果使用了 duration 验证,重新运行 devgen 生成代码。