百科.dev
全部条目在线工具AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
V

validator

> 编程语言
开源

包验证器实现结构体字段验证

1.3K stars0 点赞1 次浏览
访问官网GitHub

工具介绍

包验证器实现结构体字段验证

Package validator

Package validator implements variable validations

Installation

Just use go get.

bash
go get gopkg.in/validator.v2

And then just import the package into your own code.

go
import (
	"gopkg.in/validator.v2"
)

Usage

Please see http://godoc.org/gopkg.in/validator.v2 for detailed usage docs. A simple example would be.

go
type NewUserRequest struct {
	Username string `validate:"min=3,max=40,regexp=^[a-zA-Z]*$"`
	Name string     `validate:"nonzero"`
	Age int         `validate:"min=21"`
	Password string `validate:"min=8"`
}

nur := NewUserRequest{Username: "something", Age: 20}
if errs := validator.Validate(nur); errs != nil {
	// values not valid, deal with errors here
}

Builtin validators

Here is the list of validators buildin in the package. Validators buildin will check the element pointed to if the value to check is a pointer. The nil pointer is treated as a valid value by validators buildin other than nonzero, so you should to use nonzero if you don't want to accept a nil pointer.

…

Custom validators

It is possible to define custom validators by using SetValidationFunc. First, one needs to create a validation function.

go
// Very simple validator
func notZZ(v interface{}, param string) error {
	st := reflect.ValueOf(v)
	if st.Kind() != reflect.String {
		return errors.New("notZZ only validates strings")
	}
	if st.String() == "ZZ" {
		return errors.New("value cannot be ZZ")
	}
	return nil
}

Then one needs to add it to the list of validators and give it a "tag" name.

go
validator.SetValidationFunc("notzz", notZZ)

Then it is possible to use the notzz validation tag. This will print "Field A error: value cannot be ZZ"

go
type T struct {
	A string  `validate:"nonzero,notzz"`
}
t := T{"ZZ"}
if errs := validator.Validate(t); errs != nil {
	fmt.Printf("Field A error: %s\n", errs["A"][0])
}

You can also have multiple sets of validator rules with SetTag().

go
type T struct {
	A int `foo:"nonzero" bar:"min=10"`
}
t := T{5}
SetTag("foo")
validator.Validate(t) // valid as it's nonzero
SetTag("bar")
validator.Validate(t) // invalid as it's less than 10

SetTag is probably better used with multiple validators.

go
fooValidator := validator.NewValidator()
fooValidator.SetTag("foo")
barValidator := validator.NewValidator()
barValidator.SetTag("bar")
fooValidator.Validate(t)
barValidator.Validate(t)

This keeps the default validator's tag clean. Again, please refer to godocs for a lot of more examples and different uses.

Pull requests policy

tl;dr. Contributions are welcome.

The repository is organized in version branches. Pull requests to, say, the v2 branch that break API compatibility will not be accepted. It is okay to break the API in master, not in the branches.

As for validation functions, the preference is to keep the main code simple and add most new functions to the validator-contrib repository.

https://github.com/go-validator/validator-contrib

For improvements and/or fixes to the builtin validation functions, please make sure the behaviour will not break existing functionality in the branches. If you see a case where the functionality of the builtin will change significantly, please send a pull request against master. We can discuss then whether the changes should be incorporated in the version branches as well.

License

Copyright 2014 Roberto Teixeira

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Go

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言