golang常用库之字段参数验证库-validator使用详解

Golang常用库之字段参数验证库-validator使用详解

在 Golang 开发中,字段参数验证是一项重要的任务。一些以数据为中心的应用程序需要处理大量的用户输入、API 调用、HTTP 表单数据和其他数据。但是,如果不对这些数据进行验证和过滤,将难以保障数据安全,从而导致系统损失。而使用 Golang 的验证库-validator,可以使我们的验证和过滤任务更轻松和简单。

Validator 库是什么?

Validator 是一个 Golang 字段参数验证库。它帮助开发人员提供易于使用和强大的数据验证框架,减轻了开发人员验证数据的负担,提高了生产率。Validator 库提供了简单、灵活的 API 接口,可以让你方便地验证和处理不同类型的输入数据,以确保应用程序的兼容性和数据的安全性。

Validator 库用法

1. 安装 Validator 库

要使用 Validator 库,必须首先安装它。你可以使用 go get 命令从 Golang 公共仓库中下载和安装 Validator 库。在终端输入以下命令:

go get gopkg.in/go-playground/validator.v9

2. 定义数据模型

要使用 Validator 库进行数据验证,必须首先定义数据的基本结构。使用 Validator 库,你需要创建一个数据结构与 tag 标记一起使用,标记定义了数据字段的约束和限制。

type User struct {
    Name     string `validate:"required"`
    Email    string `validate:"required,email"`
    Age      int    `validate:"required,gt=1,lte=999"`
    Password string `validate:"required,len=6"`
}

上面的数据结构定义了一个 User 类型的数据结构,其中包括 Name、Email、Age 和 Password 等字段。每个字段都指定了有关该字段的验证规则。例如,Name 字段使用 validate:"required" 指示它是必需的,Email 字段使用 validate:"required,email" 指示它是必需的且必须是有效的电子邮件地址。

3. 使用 Validator 进行数据验证

在定义了数据结构后,就可以使用 Validator 进行数据验证。Validator 验证程序的入门点是 validator.New() 函数。使用 New() 函数创建一个新的验证器对象,可以使用 Validate() 函数对数据进行验证。

import "gopkg.in/go-playground/validator.v9"

func main() {
    // 创建一个新的验证器
    validate := validator.New()

    // 要验证的数据
    user := User{
        Name:     "John Doe",
        Email:    "john.doe@acme.com",
        Age:      20,
        Password: "secret",
    }

    // 验证数据
    err := validate.Struct(user)
    if err != nil {
        // 处理验证错误
        panic(err)
    }
}

上面的代码使用创建了一个新的验证器对象,并使用定义的 User 数据类型的变量 user 来尝试验证。如果有任何验证错误,程序将抛出一个 Panic 异常,从而使程序中断。

4. 使用 Validator 自定义错误消息

Validator 库还允许你指定自定义错误消息。你可以使用 tag 标记的一些变量来定义自定义错误消息。例如,要使用自定义消息来验证 age 字段的限制,可以按如下方式指定:

type User struct {
    Name     string `validate:"required"`
    Email    string `validate:"required,email"`
    Age      int    `validate:"required,gt=1,lte=999" error:"年龄必须在 1 到 999 年之间!"`
    Password string `validate:"required,len=6"`
}

上面的代码使用 error:"年龄必须在 1 到 999 年之间!" 来定义 age 字段的自定义错误消息。

Validator 库代码示例

接下来我们的代码示例将实现如下功能:

定义了一个数据类型 Order,其中包括 Name、Price 和 Discount 等字段。除此之外,还定义了一个 Validator 验证器,并在数据测试用例中进行调用,用以验证数据的正确与否。

package main

import (
    "fmt"
    "gopkg.in/go-playground/validator.v9"
)

type Order struct {
    Name      string `validate:"required,min=5,max=20"`
    Price     int    `validate:"required,gt=0"`
    Discount  int    `validate:"required,gt=0,lte=100"`
    StartTime string `validate:"required,datetime=2006-01-02 15:04:05"`
}

var validate *validator.Validate

func main() {
    validate = validator.New()
    order1 := Order{
        Name:      "MacBook Pro",
        Price:     20000,
        Discount:  30,
        StartTime: "2022-01-02 15:04:05",
    }

    if err := validate.Struct(order1); err != nil {
        fmt.Println("order1 data validation failed!")
        fmt.Println(err)
    } else {
        fmt.Println("order1 data validation succeeded!")
    }

    order2 := Order{
        Name:      "Laptop",
        Price:     0,
        Discount:  120,
        StartTime: "2022-00-02 15:04:05",
    }

    if err := validate.Struct(order2); err != nil {
        fmt.Println("order2 data validation failed!")
        fmt.Println(err)
    } else {
        fmt.Println("order2 data validation succeeded!")
    }
}

上面的代码中,我们使用 Validator 验证器,并对数据模型进行了定义。运行后输出结果为:

order1 data validation succeeded!
order2 data validation failed!
Key: 'Order.Price' Error:Field validation for 'Price' failed on the 'gt' tag
Key: 'Order.Discount' Error:Field validation for 'Discount' failed on the 'lte' tag
Key: 'Order.StartTime' Error:Field validation for 'StartTime' failed on the 'datetime' tag

上述代码正确地验证了我们的订单数据。对于订单 1,价格为正且适当减价。而对于订单 2,价格为 0,并且折扣值过高,不合理。此外,该订单的开始时间不是一个合法的日期时间类型,也不符合我们的要求。因此,Validator 应用程序输出了相应的错误消息。

结论

在这篇文章中,我们已经详细地介绍了 Golang 中常用的字段参数验证库-validator。我们首先讲解了 Validator 的基本概念和用法,然后通过代码示例来源于真实场景的验证数据的过程,展示了如何使用该库验证不同的数据,并通过输出结果进行了验证。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:golang常用库之字段参数验证库-validator使用详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 基于python实现双向链表

    实现双向链表需要以下几个步骤: 1. 定义节点类 class ListNode: def __init__(self, val=0, prev=None, next=None): self.val = val self.prev = prev self.next = next 链表节点需要存储的信息有:值、上一个节点的引用(即prev),下一个节点的引用(即…

    other 2023年6月27日
    00
  • 添加学生信息(Javaweb)

    添加学生信息(Javaweb) 在Javaweb开发中,添加学生信息是一个常见的需求,本文将为大家介绍如何实现添加学生信息的功能。 前置条件 在实现添加学生信息的功能前,需要保证以下条件已经满足:1. 已经创建学生信息的数据表,并确定数据表中的字段和字段类型。2. 已经创建Javaweb项目,并导入数据库连接驱动。 实现过程 1. 创建添加学生信息的JSP页…

    其他 2023年3月28日
    00
  • 如何验证IP地址?

    如何验证IP地址? 验证IP地址是确认一个给定的IP地址是否有效和合法的过程。下面是一个详细的攻略,用于验证IP地址的有效性。 步骤1:检查IP地址格式 首先,我们需要检查IP地址的格式是否正确。IP地址由四个十进制数(每个数的范围是0到255)组成,用点分隔。例如,正确的IP地址格式是192.168.0.1。以下是检查IP地址格式的示例代码: import…

    other 2023年7月30日
    00
  • asp 性能测试报告 学习asp朋友需要了解的东西

    以下是对ASP性能测试报告的详细攻略: 准备工作 安装性能测试工具,如Apache JMeter或LoadRunner。 配置测试环境,包括服务器、数据库和网络设置。 设计性能测试场景 确定测试目标,例如测试网站的并发用户数、响应时间和吞吐量。 创建测试计划,包括测试场景、用户行为和数据负载。 配置性能测试工具,设置并发用户数、请求频率和持续时间。 执行性能…

    other 2023年10月18日
    00
  • iOS9.2.1正式版升级需要多大空间 更新升级iOS9.2.1需要占用多大内存

    iOS 9.2.1正式版升级所需空间攻略 升级iOS系统是保持设备安全和享受新功能的重要步骤。在升级到iOS 9.2.1正式版之前,您需要确保设备有足够的可用空间来完成升级过程。以下是详细的攻略,包括升级所需的空间和示例说明。 1. 检查可用空间 在升级之前,您应该检查设备上的可用空间。这可以通过以下步骤完成: 打开设备的设置应用程序。 点击“通用”选项。 …

    other 2023年8月1日
    00
  • iOS获取设备唯一标识的实现步骤

    获取iOS设备唯一标识,一般有两种方式,分别是使用UDID和使用UUID。由于苹果公司已经禁用了获取UDID的方式,所以我们主要介绍如何使用UUID获取设备唯一标识。下面是具体步骤: 1. 导入头文件 在需要获取设备唯一标识的地方导入以下头文件: #import <UIKit/UIKit.h> #import "KeychainWrap…

    other 2023年6月26日
    00
  • Android Studio 官方最新版下载地址(支持国内下载)

    Android Studio 官方最新版下载地址(支持国内下载)攻略 步骤一:访问官方网站 首先,你需要访问 Android Studio 的官方网站。你可以在浏览器中输入以下网址进行访问: https://developer.android.com/studio 步骤二:选择下载版本 在官方网站上,你会看到 Android Studio 的下载页面。在这个…

    other 2023年8月4日
    00
  • 电脑开始菜单栏点不动怎么办 电脑开始键点了没反应的解决方法

    电脑开始菜单栏点不动怎么办 电脑开始键点了没反应的解决方法 如果您使用的电脑在点击开始菜单栏或开始键时没有反应,可能存在以下几种解决方法: 检查任务管理器 任务管理器可以帮助您查看系统资源的使用情况,如果有其他程序正在占用CPU、内存或磁盘资源,可能会影响系统的响应速度,导致开始菜单栏或开始键无法使用。 打开任务管理器的步骤如下:1. 用快捷键“Ctrl +…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部