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 的基本概念和用法,然后通过代码示例来源于真实场景的验证数据的过程,展示了如何使用该库验证不同的数据,并通过输出结果进行了验证。

阅读剩余 68%

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

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

相关文章

  • IIS 7.5 HTTP 错误 404.3 – Not Found错误的解决方法

    IIS 7.5 HTTP 错误 404.3 – Not Found 错误的解决方法 当在使用IIS 7.5作为Web服务器时,您可能会遇到HTTP错误404.3 – Not Found错误。这个错误通常表示IIS无法为请求提供所需的MIME类型的映射。以下是解决这个问题的完整攻略: 步骤1:检查IIS配置 首先,您需要检查IIS的配置,确保它已正确设置以处理…

    other 2023年8月5日
    00
  • React中的CSS局部引入过程

    当在React中使用CSS时,可以使用局部引入的方式来管理样式。这种方式可以确保每个组件的样式只应用于该组件本身,而不会影响其他组件。下面是React中CSS局部引入的完整攻略: 创建一个React组件,并在组件的同级目录下创建一个CSS文件。例如,我们创建一个名为\”Button\”的组件,并在同级目录下创建一个名为\”Button.css\”的CSS文件…

    other 2023年8月6日
    00
  • OPPO Pad评测 2299元,这块智慧生态屏值吗?

    OPPO Pad评测攻略 介绍 OPPO Pad是一款智慧生态屏,售价为2299元。在评估其是否值得购买之前,我们将对其进行全面评测,包括性能、功能、设计等方面的考量。 性能评测 我们将对OPPO Pad的性能进行评测,包括处理器性能、内存容量、存储空间等方面的考量。以下是两个示例说明: 处理器性能:我们将使用基准测试工具(如Geekbench)对OPPO …

    other 2023年10月18日
    00
  • C#实现读写ini配置文件的方法详解

    C#实现读写ini配置文件的方法详解 注意: 本篇攻略的实现方法适用于.NET Framework 2.0及以上版本。 什么是ini配置文件? ini配置文件是一种用来保存程序配置信息的文件,它通常以.ini为后缀名,并且采用了键值对的方式来存储数据。在Windows中,ini配置文件被广泛应用于系统启动项、应用程序配置项等方面。 实现读取ini配置文件 要…

    other 2023年6月25日
    00
  • Android中PackageManager使用详解

    Android中PackageManager使用详解 PackageManager是Android中的一个重要类,用于管理应用程序包的信息和功能。它提供了许多方法来获取和操作应用程序包的信息。以下是对PackageManager的详细讲解。 获取PackageManager实例 要使用PackageManager,首先需要获取PackageManager的实…

    other 2023年10月13日
    00
  • 详解Webpack抽离第三方类库以及common解决方案

    Webpack是前端工程化中不可避免的一环,它可以将我们项目中的各种资源进行打包和压缩,使得项目的性能得到有效优化。其中webpack从v4开始,废弃了CommonsChunkPlugin插件,提供了新的功能:SplitChunksPlugin。它可以帮助我们更好的抽离第三方类库以及项目中常用模块。下面我们来详细讲解如何进行配置。 抽离第三方类库 Webpa…

    other 2023年6月26日
    00
  • C语言中的内存管理详情

    C语言中的内存管理详情 C语言是一种低级语言,它提供了对内存的直接控制。在C语言中,内存管理是非常重要的,因为它直接影响程序的性能和稳定性。本攻略将详细介绍C语言中的内存管理。 内存分区 在C语言中,内存被分为以下几个区域: 栈(Stack):栈是用于存储局部变量和函数调用信息的区域。栈的大小是固定的,由编译器在编译时确定。栈上的内存分配和释放是自动进行的,…

    other 2023年7月31日
    00
  • 在线canvas画画

    在线canvas画画 Canvas是HTML5中新增的特性,它提供的API可以将HTML文档内的元素绘制成图形,具备非常强大的绘图能力。通过使用Canvas,我们可以在浏览器中进行各种绘图操作,从简单的几何图形到复杂的图案、动画等等。 在本文中,我们将介绍如何通过Canvas实现一个简单的在线画板应用。 步骤一:创建Canvas元素 首先,我们需要在HTML…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部