Go (Golang) में डेटा सत्यापन: लाइब्रेरीज़ और व्यावहारिक उदाहरण
\n\nडेटा सत्यापन Go में विश्वसनीय वेब एप्लिकेशन और API विकसित करने के प्रमुख पहलुओं में से एक है। इनकमिंग डेटा की सही जांच के बिना, एप्लिकेशन त्रुटियों, गलत इनपुट और हमलों के प्रति संवेदनशील हो जाता है। इस लेख में, हम Go में सत्यापन के लिए तीन लोकप्रिय लाइब्रेरीज़: go-playground/validator, ozzo-validation और govalidator पर चर्चा करेंगे, और उनके उपयोग के उदाहरण देखेंगे।
Go में सत्यापन की आवश्यकता क्यों है?
\nGo एक सख्ती से टाइप की गई भाषा है, लेकिन यह डेटा में तार्किक त्रुटियों से नहीं बचाती: खाली स्ट्रिंग, गलत ईमेल, स्वीकार्य सीमा से बाहर संख्याएं। सत्यापन निम्नलिखित में मदद करता है:
\n- \n
- इनपुट पर डेटा अखंडता सुनिश्चित करना; \n
- त्रुटि प्रबंधन को सरल बनाना; \n
- एप्लिकेशन सुरक्षा बढ़ाना; \n
- Boilerplate कोड की मात्रा कम करना। \n
1. go-playground/validator — स्वर्ण मानक
\nसबसे लोकप्रिय लाइब्रेरी (GitHub पर 15k से अधिक स्टार)। यह स्ट्रक्चर टैग में सीधे सत्यापन नियमों का वर्णन करने की अनुमति देती है।
\n\nस्थापना
\ngo get github.com/go-playground/validator/v10\n\nमूल उदाहरण
\npackage main\n\nimport (\n "fmt"\n "github.com/go-playground/validator/v10"\n)\n\ntype User struct {\n Name string `validate:"required,min=3,max=50"`\n Email string `validate:"required,email"`\n Age int `validate:"gte=18,lte=120"`\n}\n\nfunc main() {\n validate := validator.New()\n user := User{\n Name: "A",\n Email: "invalid-email",\n Age: 15,\n }\n err := validate.Struct(user)\n if err != nil {\n for _, err := range err.(validator.ValidationErrors) {\n fmt.Printf("फ़ील्ड: %s, त्रुटि: %s\\n", err.Field(), err.Tag())\n }\n }\n}\n\nकस्टम वैलिडेटर
\nvalidate.RegisterValidation("is-valid-username", func(fl validator.FieldLevel) bool {\n return len(fl.Field().String()) >= 5\n})\n\ntype Login struct {\n Username string `validate:"required,is-valid-username"`\n}\n\n2. ozzo-validation — लचीलापन और पठनीयता
\nozzo-validation लाइब्रेरी नियम बनाने के लिए fluent-इंटरफ़ेस प्रदान करती है। यह जटिल व्यावसायिक नियमों के लिए उपयुक्त है।
स्थापना
\ngo get github.com/go-ozzo/ozzo-validation/v4\n\nउपयोग का उदाहरण
\npackage main\n\nimport (\n "fmt"\n validation "github.com/go-ozzo/ozzo-validation/v4"\n "github.com/go-ozzo/ozzo-validation/v4/is"\n)\n\ntype Order struct {\n ProductID string\n Quantity int\n Email string\n}\n\nfunc (o Order) Validate() error {\n return validation.ValidateStruct(&o,\n validation.Field(&o.ProductID, validation.Required, validation.Length(5, 20)),\n validation.Field(&o.Quantity, validation.Required, validation.Min(1), validation.Max(100)),\n validation.Field(&o.Email, validation.Required, is.Email),\n )\n}\n\nfunc main() {\n order := Order{ProductID: "AB", Quantity: 0, Email: "bad"}\n err := order.Validate()\n if err != nil {\n fmt.Println(err)\n }\n}\n\nविशेषताएं
\n- \n
- टैग की अनुपस्थिति — नियम कोड में लिखे जाते हैं; \n
- कस्टम प्रकारों के साथ आसान एकीकरण; \n
- सशर्त सत्यापन का समर्थन। \n
3. govalidator — छोटे प्रोजेक्ट्स के लिए सरलता
\nस्ट्रिंग, संख्याओं और स्ट्रक्चर की जांच के लिए तैयार फ़ंक्शनों के सेट वाली हल्की लाइब्रेरी।
\n\nस्थापना
\ngo get github.com/asaskevich/govalidator\n\nउदाहरण
\npackage main\n\nimport (\n "fmt"\n "github.com/asaskevich/govalidator"\n)\n\nfunc main() {\n // स्ट्रिंग जांच\n fmt.Println(govalidator.IsEmail("test@example.com")) // true\n fmt.Println(govalidator.IsURL("https://pythonlib.ru")) // true\n fmt.Println(govalid