首页 > 后端开发 > Golang > 正文

Go 框架中的输入验证策略

WBOY
发布: 2024-07-03 21:12:01
原创
522人浏览过

在 go 框架中实现输入验证的策略包括:使用 validator 包提供的预定义验证器,如 required、email、numeric。创建自定义验证器实现 validation 接口,并使用标签注册。在 api 处理器中使用输入验证策略,验证请求正文中的 json 数据。

Go 框架中的输入验证策略

Go 框架中的输入验证策略

输入验证是 Web 应用程序开发中的一个关键步骤,它有助于保护应用程序免受恶意输入的影响。在 Go 中,有几种方法可以实现输入验证,本文将介绍一些常见的策略。

验证器包

Go 提供了一个名为 [validator](https://github.com/go-playground/validator) 的第三方包,它提供了一些预定义的验证器,可以轻松地验证输入数据。要使用 validator 包,需要先安装它:

go get github.com/go-playground/validator
登录后复制

然后,可以使用 ValidateStruct() 函数验证一个结构体,例如:

import (
    "github.com/go-playground/validator"
)

type User struct {
    Name     string
    Age      int
    Password string
}

func main() {
    user := User{
        Name:     "John",
        Age:      25,
        Password: "12345",
    }

    validate := validator.New()

    if err := validate.Struct(user); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("Input is valid")
    }
}
登录后复制

validator 包提供了许多预定义的验证器,可以使用 [标签](https://pkg.go.dev/github.com/go-playground/validator#ValidateStruct) 来指定,例如 requiredemailnumeric

百度文心百中
百度文心百中

百度大模型语义搜索体验中心

百度文心百中 22
查看详情 百度文心百中

自定义验证器

除了使用预定义的验证器之外,还可以创建自己的自定义验证器。要创建自定义验证器,需要实现 Validation 接口:

import (
    "fmt"
    "github.com/go-playground/validator"
)

type MinLengthValidator struct {
    MinLength int
}

func (v MinLengthValidator) Validate(val interface{}) error {
    l := reflect.ValueOf(val).Len()
    if l < v.MinLength {
        return fmt.Errorf("the length of the value must be at least %d", v.MinLength)
    }
    return nil
}

func RegisterMinLengthValidator(Validate *validator.Validate) {
    Validate.RegisterValidation("min_length", MinLengthValidator{})
}
登录后复制

然后,可以在结构体中使用自定义验证器,例如:

type User struct {
    Name     string `validate:"min_length=3"`
    Age      int
    Password string
}
登录后复制

在验证阶段,Go 框架将自动调用自定义验证器。

实战案例

以下是一个使用输入验证策略的实际例子。这是一个简单的 API 处理器,它接受一个包含用户名称和年龄的 JSON 请求正文:

import (
    "fmt"
    "net/http"

    "github.com/go-playground/validator"
    "github.com/labstack/echo"
)

type User struct {
    Name  string `json:"name" validate:"required"`
    Age   int    `json:"age" validate:"required,min=1"`
    Email string `json:"email" validate:"email"`
}

func main() {
    e := echo.New()

    e.POST("/users", createUser)

    e.Logger.Fatal(e.Start(":8080"))
}

func createUser(c echo.Context) error {
    u := &User{}
    if err := c.Bind(u); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, err.Error())
    }

    validate := validator.New()
    if err := validate.Struct(u); err != nil {
        return echo.NewHTTPError(http.StatusBadRequest, err.Error())
    }

    // 保存用户到数据库...

    return c.JSON(http.StatusCreated, u)
}
登录后复制

以上就是Go 框架中的输入验证策略的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号