Go के गुप्त शॉर्टकट: struct tags क्या हैं और इनकी आवश्यकता क्यों है

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

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

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

परिचय: Go कोड में जादुई उद्धरण

\n\n

यदि आपने कभी JSON के साथ काम करने के लिए Go में स्ट्रक्चर लिखे हैं, तो आपने निश्चित रूप से ये अजीब संरचनाएँ देखी होंगी:

\n\n
type User struct {\n    Name string `json:"name"`\n    Age  int    `json:"age,omitempty"`\n}
\n\n

ये रहस्यमयी बैकटिक्स (`json:"name"`) struct tags (स्ट्रक्चर टैग) कहलाते हैं। शुरुआती लोगों के लिए ये जादू या अनावश्यक शोर की तरह दिखते हैं। लेकिन वास्तव में ये Go की सबसे शक्तिशाली और सुरुचिपूर्ण विशेषताओं में से एक हैं, जो जटिल मैक्रोज़ के बिना मेटा-प्रोग्रामिंग की अनुमति देते हैं।

\n\n

इस लेख में, हम समझेंगे कि Go में struct tags क्या हैं, इनकी आवश्यकता क्यों है, ये कितने प्रकार के होते हैं, और वास्तविक प्रोजेक्ट्स में इनका उपयोग कैसे करें। आप इन 'जादुई स्ट्रिंग्स' से डरना बंद कर देंगे और सचेत रूप से इनका उपयोग करना शुरू कर देंगे।

\n\n

struct tags क्या हैं? सरल व्याख्या

\n\n

Struct tags स्ट्रिंग लिटरल हैं जो स्ट्रक्चर में फील्ड के प्रकार के बाद लिखे जाते हैं। ये बैकटिक्स (`) में संलग्न होते हैं और कुंजी:"मान" जोड़े के रूप में होते हैं।

\n\n

भाषा के दृष्टिकोण से, Go में स्ट्रक्चर टैग केवल टेक्स्ट हैं। Go कंपाइलर इनका विश्लेषण या जाँच नहीं करता है। इनका अर्थ तभी प्रकट होता है जब आप (या कोई लाइब्रेरी) reflect पैकेज के माध्यम से इन्हें पढ़ते हैं।

\n\n

सीधे शब्दों में कहें तो: टैग मेटाडेटा हैं जिन्हें आप स्ट्रक्चर के फील्ड से जोड़ते हैं। आपके प्रोग्राम के अन्य भाग इस मेटाडेटा को पढ़ सकते हैं और अपना व्यवहार बदल सकते हैं।

\n\n

struct tags की आवश्यकता क्यों है? 3 मुख्य परिदृश्य

\n\n

1. सीरियलाइज़ेशन/डीसीरियलाइज़ेशन (JSON, XML, YAML)

\n\n

यह सबसे सामान्य और स्पष्ट उपयोग का मामला है। कल्पना करें कि आपके पास एक Go स्ट्रक्चर है, और आप इसे JSON में बदलना चाहते हैं (या इसके विपरीत)।

\n\n
type User struct {\n    ID        int    `json:"id"`\n    FirstName string `json:"first_name"`\n    LastName  string `json:"last_name"`\n    Password  string `json:"-"`\n}\n\nfunc main() {\n    user := User{ID: 1, FirstName: "इवान", LastName: "पेत्रोव", Password: "गुप्त"}\n    jsonData, _ := json.Marshal(user)\n    fmt.Println(string(jsonData))\n    // आउटपुट: {"id":1,"first_name":"इवान","last_name":"पेत्रोव"}\n    // पासवर्ड JSON में नहीं आया, क्योंकि टैग json:"-"\n}
\n\n

टैग के बिना, फील्ड का नाम ID, FirstName आदि होता, जो JSON शैली (camelCase बनाम snake_case) से मेल नहीं खाता। JSON के लिए Golang struct tags आपको नियंत्रित करने की अनुमति देते हैं:

\n
    \n
  • JSON में फील्ड का नाम
  • \n
  • खाली फील्ड को छोड़ना (omitempty)
  • \n
  • फील्ड को आउटपुट से बाहर करना (-)
  • \n
  • नेस्टेड विकल्प
  • \n
\n\n

2. डेटा वैलिडेशन

\n\n

go-playground/validator जैसी लोकप्रिय लाइब्रेरीज़ वैलिडेशन के लिए Go स्ट्रक्चर टैग का उपयोग करती हैं। आप सीधे स्ट्रक्चर में नियम लिखते हैं:

\n\n
type SignUpRequest struct {\n    Email    string `validate:"required,email"`\n    Password string `validate:"required,min=8,max=32"`\n    Age      int    `validate:"gte=18,lte=120"`\n}\n\nfunc validateUser(user SignUpRequest) error {\n    validate := validator.New()\n    err := validate.Struct(user)\n    return err\n}
\n\n

यह अविश्वसनीय रूप से सुविधाजनक है: वैलिडेशन नियम डेटा के पास होते हैं, कोड में बिखरे हुए नहीं। वैलिडेशन के लिए struct tags कोड को स्व-दस्तावेजीकरण बनाते हैं।

\n\n

3. डेटाबेस के साथ काम करना (ORM)

\n\n

ORM लाइब्रेरीज़ (GORM, Ent, SQLBoiler) ORM के लिए struct tags का सक्रिय रूप से उपयोग करती हैं। उदाहरण के लिए, GORM में:

\n\n
type Product struct {\n    gorm.Model\n    Code  string `gorm:"uniqueIndex;not null"`\n    Price uint   `gorm:"default:0"`\n    UserID uint  `gorm:"foreignKey:UserID"`\n}
\n\n

gorm टैग इंडेक्स, प्रतिबंध, विदेशी कुंजियाँ और तालिका की अन्य सेटिंग्स निर्दिष्ट करते हैं। यह अलग माइग्रेशन लिखने की आवश्यकता को समाप्त करता है।

\n\n

s कैसे काम करते हैं

ब्लॉग

पुस्तक अनुशंसाएँ