Go में डेटा सत्यापन: लाइब्रेरीज़, उदाहरण और सर्वोत्तम अभ्यास

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Go (Golang) में डेटा सत्यापन: उपकरण, उदाहरण और सर्वोत्तम अभ्यास



डेटा सत्यापन किसी भी वेब एप्लिकेशन या API के विकास के प्रमुख चरणों में से एक है। Go (Golang) में, सख्त टाइपिंग, शक्तिशाली लाइब्रेरीज़ और अंतर्निहित क्षमताओं के कारण यह कार्य विशेष रूप से सुंदर ढंग से हल किया जाता है। इस लेख में, हम डेटा जाँच के मुख्य दृष्टिकोणों, लोकप्रिय लाइब्रेरीज़ का विश्लेषण करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।



Go में सत्यापन की आवश्यकता क्यों है?

Go नेटिव कोड में कंपाइल होता है और इसमें Python या JavaScript जैसी अंतर्निहित रिफ्लेक्शन प्रणाली नहीं है। हालाँकि, डेवलपर्स ने कई उत्कृष्ट लाइब्रेरीज़ बनाई हैं जो निम्नलिखित की अनुमति देती हैं:

  • स्ट्रक्चर फ़ील्ड्स को फ़ॉर्मेट (email, URL, फ़ोन) के अनुसार जाँचना;
  • सीमाएँ निर्धारित करना (min, max, required);
  • व्यावसायिक तर्क के लिए कस्टम वैलिडेटर बनाना;
  • वेब फ्रेमवर्क (Gin, Echo, Fiber) के साथ एकीकरण करना।


1. go-playground/validator लाइब्रेरी (सबसे लोकप्रिय)

go-playground/validator Go में स्ट्रक्चर सत्यापन के लिए डी-फैक्टो मानक है। यह स्ट्रक्चर फ़ील्ड्स में टैग का उपयोग करता है और 100 से अधिक अंतर्निहित नियमों का समर्थन करता है।



package main

import ( "fmt" "github.com/go-playground/validator/v10")

type User struct { Name string `validate:"required,min=2,max=50"` Email string `validate:"required,email"` Age int `validate:"gte=18,lte=120"`}

func main() { validate := validator.New() user := User{ Name: "A", Email: "invalid-email", Age: 15, } err := validate.Struct(user) if err != nil { for _, e := range err.(validator.ValidationErrors) { fmt.Printf("फ़ील्ड: %s, त्रुटि: %s, मान: %v", e.Field(), e.Tag(), e.Value()) } }}


आउटपुट:

फ़ील्ड: Name, त्रुटि: min, मान: Aफ़ील्ड: Email, त्रुटि: email, मान: invalid-emailफ़ील्ड: Age, त्रुटि: gte, मान: 15


2. ozzo-validation लाइब्रेरी (चेन कॉल के साथ विकल्प)

ozzo-validation बिना टैग के अधिक घोषणात्मक शैली प्रदान करता है। यह उन मामलों के लिए उपयुक्त है जहाँ स्ट्रक्चर को बदला नहीं जा सकता या गतिशील सत्यापन की आवश्यकता है।



package main

import ( "fmt" "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is")

type Product struct { Name string Price float64}

func main() { p := Product{Name: "", Price: -10} err := validation.ValidateStruct(&p, validation.Field(&p.Name, validation.Required, validation.Length(1, 100)), validation.Field(&p.Price, validation.Required, validation.Min(0.01)), ) if err != nil { fmt.Println(err) }}


3. कस्टम वैलिडेटर

अक्सर ऐसी जाँच की आवश्यकता होती है जो अंतर्निहित नियमों में शामिल नहीं है। उदाहरण के लिए, पासवर्ड सत्यापन या नाम की विशिष्टता।



package main

import ( "fmt" "github.com/go-playground/validator/v10" "unicode")

func passwordValidator(fl validator.FieldLevel) bool { pwd := fl.Field().String() hasUpper := false hasDigit := false for _, ch := range pwd { if unicode.IsUpper(ch) { hasUpper = true } if unicode.IsDigit(ch) { hasDigit = true } } return len(pwd) >= 8 && hasUpper && hasDigit}

type Account struct { Password string `validate:"password"`}

func main() { validate := validator.New() validate.RegisterValidation("password", passwordValidator)

acc := Account{Password: "weak"} err := validate.Struct(acc) if err != nil { fmt.Println("पासवर्ड सत्यापन में विफल रहा") } else { fmt.Println("पासवर्ड सही है") }}


4. Gin के साथ HTTP अनुरोधों का सत्यापन

Gin फ्रेमवर्क उपयोग करता है

अनुशंसाएँ