Skip to content

Yet another Go struct/object validation package, with a focus on simplicity, flexibility, and full control over validation logic.

License

Notifications You must be signed in to change notification settings

romdo/go-validate

Repository files navigation

go-validate

Yet another Go struct/object validation package, with a focus on simplicity, flexibility, and full control over validation logic.

Go Reference GitHub tag (latest SemVer) Actions Status Coverage GitHub issues GitHub pull requests License Status

Add validation to any type, by simply implementing the Validatable interface:

type Validatable interface {
	Validate() error
}

Import

import "github.com/romdo/go-validate"

Example

type Order struct {
	Books []*Book `json:"books"`
}

type Book struct {
	Title  string `json:"title"`
	Author string `json:"author"`
}

func (s *Book) Validate() error {
	var errs error
	if s.Title == "" {
		errs = validate.Append(errs, &validate.Error{
			Field: "Title", Msg: "is required",
		})
	}

	// Helper to perform the same kind of check as above for Title.
	errs = validate.Append(errs, validate.RequireField("Author", s.Author))

	return errs
}

func main() {
	errs := validate.Validate(&Order{Books: []*Book{{Title: ""}}})

	for _, err := range validate.Errors(errs) {
		fmt.Println(err.Error())
	}
}

Above example produces the following output:

books.0.title: is required
books.0.author: is required

Documentation

Please see the Go Reference for documentation and examples.

LICENSE

MIT

About

Yet another Go struct/object validation package, with a focus on simplicity, flexibility, and full control over validation logic.

Topics

Resources

License

Stars

Watchers

Forks