Data validation and sanitization are fundamental processes in any application development to ensure कि input data is consistent, correct, and secure before processing it further. In the Go programming language, the `validator` package provides a convenient way to validate and sanitize your data.
Introduction to the `validator` package
The `validator` package in Golang provides a rich set of functionality to validate and tag struct fields using simple annotations. It serves as a comprehensive library for performing checks like length, format, inclusion in a collection, and much more. It's helpful to enforce constraints on your data, ensuring that the inputs remain clean and predictable.
Installing the `validator` package
To start using the `validator` package in your project, first ensure it's installed. You can do this using the following command:
go get github.com/go-playground/validator/v10Basic Usage
Building a struct validation in Go typically involves tagging your struct fields with validation rules. Here's a basic example:
package main
import (
"fmt"
"github.com/go-playground/validator/v10"
)
type User struct {
Name string `validate:"required"`
Email string `validate:"required,email"`
Age int `validate:"gte=18,lte=120"`
}
func main() {
v := validator.New()
user := User{
Name: "",
Email: "invalid-email",
Age: 17,
}
if err := v.Struct(user); err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Printf("%s is not valid: %s\n", err.Field(), err.Tag())
}
}
}
In this example, the `User` struct has some simple validation rules defined using struct field tags:
requiredmakes sure the field is not omitted.emailensures the email format is correct.gte=18,lte=120establishes an age constraint where values should be between 18 and 120.
Advanced Validation Rules
`validator` provides numerous built-in tags for validation, and you can easily create custom ones if needed. Here’s how you can use more advanced built-in tags:
type Order struct {
ProductID string `validate:"alphanum"`
Quantity int `validate:"gt=0"`
Price float64 `validate:"required,gt=0"`
OrderNotes string `validate:"max=255"`
}
In this `Order` struct:
alphanumallows only alphanumeric values inProductID.gt=0ensures thatQuantityandPricemust be greater than 0.max=255limitsOrderNotesto not exceed 255 characters.
Custom Validation Functions
If your application demands specific validation logic beyond what the built-in functions offer, you can register custom validation functions:
func registerCustomValidations(v *validator.Validate) {
v.RegisterValidation("is-awesome", func(fl validator.FieldLevel) bool {
return fl.Field().String() == "awesome"
})
}
func main() {
v := validator.New()
registerCustomValidations(v)
type Custom struct {
Opinion string `validate:"is-awesome"`
}
c := Custom{Opinion: "boring"}
if err := v.Struct(c); err != nil {
for _, err := range err.(validator.ValidationErrors) {
fmt.Printf("%s: %s\n", err.Field(), err.Error())
}
}
}
This example shows how to validate that a field must contain the word "awesome" using a custom tag is-awesome.
Conclusion
Using the validator package in Go is a robust way to ensure that your application data is valid and properly structured before it makes its way further into your system. This package boosts both security and robustness in data handling. Whether you are validating complex struct inputs or need customizable rules, validator offers a comprehensive solution.