Logo

0x5a.live

for different kinds of informations and explorations.

GitHub - twharmon/govalid: Struct validation using tags

Struct validation using tags. Contribute to twharmon/govalid development by creating an account on GitHub.

Visit SiteGitHub - twharmon/govalid: Struct validation using tags

GitHub - twharmon/govalid: Struct validation using tags

Struct validation using tags. Contribute to twharmon/govalid development by creating an account on GitHub.

Powered by 0x5a.live ๐Ÿ’—

Govalid

Use Govalid to validate structs.

Documentation

For full documentation see pkg.go.dev.

Todo

Document use of dive. Rules are now ordered.

  • pointers: dereference and check remaining rules
  • slices / arrays: check each item with remaining rules
  • structs: validates the struct according to its own field tags (remaining rules have no meaning)

Example

package main

import (
	"errors"
	"fmt"
	"log"
	"strings"
	"unicode/utf8"

	"github.com/twharmon/govalid"
)

type Post struct {
	// ID has no constraints
	ID int

	// Title is required, must be at least 3 characters long, and
	// cannot be more than 20 characters long
	Title string `valid:"req|min:3|max:20"`

	// Body is not required, cannot be more than 10000 charachers,
	// and must be "fun" (a custom rule defined below).
	Body string `valid:"max:10000|fun"`
}

func main() {
	// Add custom string rule "fun" that can be used on any string field
	// in any struct.
	govalid.Rule("fun", func(v any) error {
		switch tv := v.(type) {
		case string:
			if float64(strings.Count(tv, "!"))/float64(utf8.RuneCountInString(tv)) > 0.001 {
				return nil
			}
			return errors.New("must contain more exclamation marks")
		default:
			return errors.New("fun constraint must be applied to string only")
		}
	})
	fmt.Println(govalid.Validate(&Post{
		ID:    5,
		Title: "Hi",
		Body:  "Hello world!",
	}))
}

Contribute

Make a pull request.

GoLang Resources

are all listed below.

Resources

listed to get explored on!!

Made with โค๏ธ

to provide different kinds of informations and resources.