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.