数据校验

1. 概述

我们的框架提供了一个灵活且可扩展的数据校验系统。它允许您使用简单的标签语法定义验证规则,支持内置和自定义规则,并提供了自定义错误消息的能力。

2. 标签语法

验证规则使用结构体字段的 v 标签定义。完整的标签语法如下:

field@rule1|rule2:param1,param2|rule3#自定义错误消息
  • field: (可选)指定字段名,如果不提供,将使用结构体字段名

  • @: 分隔字段名和规则列表

  • |: 分隔多个规则

  • :: 分隔规则名和参数

  • ,: 分隔多个参数

  • #: 分隔规则和自定义错误消息

示例:

type User struct {
    Username string `v:"username@required|length:3,20#用户名长度必须在3到20个字符之间"`
    Email    string `v:"email@required|email#请输入有效的电子邮件地址"`
}

3. 内置规则

我们的框架提供了以下内置规则:

  • required: 字段不能为空

  • length:min,max: 字符串长度必须在指定范围内

  • regex:pattern: 字段必须匹配指定的正则表达式

  • email: 字段必须是有效的电子邮件地址

  • phone: 字段必须是有效的电话号码

使用示例:

4. 自定义规则

您可以通过实现 Rule 接口来创建自定义规则:

示例:创建一个 "even" 规则来验证偶数

使用自定义规则:

5. 错误消息处理

错误消息可以通过以下方式定义:

  1. 规则的默认消息(在 Rule.Message() 中定义)

  2. 标签中的自定义消息(使用 # 分隔)

当验证失败时,系统会优先使用自定义消息(如果提供),否则使用默认消息。

6. 解析标签值

我们使用 ParseTagValue 函数来解析验证标签:

这个函数解析完整的标签字符串,提取字段名、规则和自定义错误消息。

7. 最佳实践

  1. 为每个需要验证的字段提供明确的规则。

  2. 使用自定义错误消息来提供更具体的反馈。

  3. 对于复杂的验证逻辑,考虑创建自定义规则。

  4. 始终为必填字段添加 required 规则。

  5. 使用正则表达式规则时要小心,确保它们不会过于复杂或限制性太强。

  6. 在单元测试中覆盖各种验证场景,包括有效和无效的输入。

8. 完整示例

在这个例子中,我们定义了一个创建用户的请求结构,使用各种内置规则和自定义错误消息来验证输入数据。

通过遵循这些指导原则和使用提供的功能,您可以确保 API 请求数据的一致性和有效性,提高整体的代码质量和用户体验。

最后更新于