
Pokud od někud něco načítáte, a jste aspoň trochu defenzivně naladěný, pak určitě budete chtít validovat získaná, načtená data.
Vlastní cestou
Můžete začít třeba tím, že si budete psát nějakou vlastní funkcionalitu pro validaci a bude na vás kompletní logika a implementace. Třeba nějak takto, nebo nějak lépe:
type osoba struct {
Jmeno string
Prijmeni string
}
func osobaValidate(o osoba) error {
if len(o.Jmeno) < 5 || len(o.Jmeno) > 10 {
return fmt.Errorf("Jmeno je spatne: %s", o.Jmeno)
}
if len(o.Prijmeni) < 5 || len(o.Prijmeni) > 10 {
return fmt.Errorf("Jmeno je spatne: %s", o.Jmeno)
}
return nil
}
Nebo to necháte na Go
A využijete balíčku validator, který vám s pomocí runtimové Go knihovny reflect poskytne vše potřebné a validaci vyřešíte mnohem komfortněji:
package main
import (
"fmt"
"gopkg.in/go-playground/validator.v9"
)
type osoba struct {
Jmeno string `validate:"max=10,min=5"`
Prijmeni string `validate:"max=10,min=5"`
}
func main() {
pepa := osoba{
Jmeno: "p",
Prijmeni: "p",
}
var validate *validator.Validate
validate = validator.New()
if err := validate.Struct(pepa); err != nil {
fmt.Println(err)
}
fmt.Println(pepa)
}
Jediné co musíte udělat je dopsat validační pravidla do definice struktury. V kódu to pak vypadá pěkně, protože krom typvé definice přímo na jednom místě připojujete i pravidla pro samotný obsah. A ty mohou být mnohem složitější, než je jen kontrola délky.