Struct से बाँधना
कॉन्फ़िगरेशन को अनमार्शल करें
Struct से बाँधना, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
ढीली कुंजियों से संरचना तक
हर जगह GetString कॉल करने से स्ट्रिंग कुंजियाँ आपके पूरे कोड में बिखर जाती हैं। कॉन्फ़िगरेशन को प्रकार वाली संरचना में अनमर्शल करने से फ़ील्ड के नाम संकलन-समय पर सुनिश्चित होते हैं और उसका स्वरूप एक ही स्थान पर दिखाई देता है।
कॉन्फ़िगरेशन संरचना परिभाषित करना
ऐसी संरचना घोषित करें जिसके फ़ील्ड में mapstructure टैग हों, ताकि वाइपर जान सके कि कौन-सी कॉन्फ़िगरेशन कुंजी किस फ़ील्ड से मैप होती है। हर फ़ील्ड के बाद mapstructure:"host" जैसा टैग आता है, जिसे वास्तविक गो स्रोत में बैकटिक के बीच लिखा जाता है।
type ServerConfig struct {
Host string // tag: mapstructure host
Port int // tag: mapstructure port
}
type Config struct {
Server ServerConfig // tag: mapstructure server
Debug bool // tag: mapstructure debug
}Unmarshal कॉल करना
कॉन्फ़िगरेशन पढ़ने के बाद उसे अपनी संरचना में डिकोड करें:
var cfg Config
if err := viper.Unmarshal(&cfg); err != nil {
log.Fatalf("unable to decode config: %v", err)
}
fmt.Println(cfg.Server.Port)json के बजाय mapstructure क्यों
वाइपर mapstructure लाइब्रेरी का उपयोग करता है, क्योंकि कॉन्फ़िगरेशन केवल जेसन से नहीं, बल्कि कई प्रारूपों (YAML, पर्यावरण, TOML) से आ सकता है। mapstructure टैग किसी एक प्रारूप पर निर्भर नहीं होता और सामान्य मैप से डिकोड करता है।
एकल उपवृक्ष को अनमर्शल करना
आप UnmarshalKey के साथ केवल एक अनुभाग को डिकोड कर सकते हैं:
var sc ServerConfig
viper.UnmarshalKey("server", &sc)
fmt.Println(sc.Host, sc.Port)नेस्टेड और स्लाइस फ़ील्ड
mapstructure नेस्टिंग और स्लाइस को अपने-आप संभालता है:
- नेस्टेड संरचनाएँ नेस्टेड कॉन्फ़िगरेशन अनुभागों से मैप होती हैं
[]stringफ़ील्ड YAML/जेसन सरणी से मैप होता है
स्लाइस फ़ील्ड में mapstructure:"hosts" जैसा टैग होगा (वास्तविक स्रोत में इसे बैकटिक के बीच लिखा जाता है)।
type Config struct {
Hosts []string // tag: mapstructure hosts
}डिफ़ॉल्ट फ़ील्ड मान
यदि कोई कुंजी मौजूद नहीं है और आपने कोई डिफ़ॉल्ट मान सेट नहीं किया है, तो फ़ील्ड गो का शून्य मान लेता है (0, खाली स्ट्रिंग, false)। उचित मान सुनिश्चित करने के लिए संरचना बाइंडिंग को SetDefault के साथ मिलाएँ।
डिकोड की गई संरचना का सत्यापन
अनमर्शल करने के बाद सत्यापन करें। एक सामान्य तरीका Validate() विधि है, जो असंभव संयोजनों (पोर्ट 0, खाली होस्ट) के लिए त्रुटि लौटाती है।
func (c Config) Validate() error {
if c.Server.Port == 0 {
return fmt.Errorf("server.port is required")
}
return nil
}डिकोड करने की त्रुटियाँ प्रकार-विशिष्ट होती हैं
यदि कोई मान फ़ील्ड के प्रकार में समा नहीं सकता (जहाँ पूर्णांक अपेक्षित हो वहाँ स्ट्रिंग हो), तो डिकोड करने पर उस फ़ील्ड का वर्णन करने वाली त्रुटि मिलती है। इसे अनदेखा करने के बजाय हमेशा जाँचें और स्पष्ट रूप से दिखाएँ।
encoding/json के साथ यही अवधारणा
मानक पुस्तकालय JSON को इसी तरह डिकोड कर सकता है। स्पष्ट संरचना-टैग के साथ यह प्रकारित फ़ील्ड भरता है; मानचित्र के साथ यह आपको सामान्य पहुँच देता है। नीचे दिया गया चलाने योग्य उदाहरण नेस्टेड मानचित्र का उपयोग करता है, ताकि पाठक इसे संरचना-टैग के बिना चला सके।
चलाने योग्य: नेस्टेड कॉन्फ़िगरेशन डिकोड करना
यह स्वयंपूर्ण प्रोग्राम नेस्टेड JSON कॉन्फ़िगरेशन को सामान्य मानचित्र में डिकोड करता है और उसके नेस्टेड फ़ील्ड पढ़ता है, ठीक उसी तरह जैसे Unmarshal किसी संरचना को भरता है।
package main
import (
"encoding/json"
"fmt"
)
func main() {
raw := "{\"server\":{\"host\":\"localhost\",\"port\":8080},\"debug\":true}"
var c map[string]any
if err := json.Unmarshal([]byte(raw), &c); err != nil {
panic(err)
}
srv := c["server"].(map[string]any)
fmt.Printf("%v:%v debug=%v\n", srv["host"], srv["port"], c["debug"])
}त्वरित जाँच
कॉन्फ़िगरेशन को संरचनाओं से जोड़ने की अपनी समझ जाँचें।
पुनरावलोकन
आपने कॉन्फ़िगरेशन को संरचनाओं से जोड़ना सीखा:
mapstructureटैग औरviper.Unmarshal(&cfg)का उपयोग करेंUnmarshalKeyकिसी एक उपवृक्ष को डिकोड करता है- नेस्टेड संरचनाएँ और स्लाइस अपने-आप डिकोड हो जाते हैं
- गलत संयोजनों को जल्दी पकड़ने के लिए
Validate()विधि जोड़ें
एआई शिक्षक के साथ Go सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “Struct से बाँधना” पाठ निःशुल्क है?
हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Struct से बाँधना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Struct से बाँधना” में मैं क्या सीखूँगा?
कॉन्फ़िगरेशन को अनमार्शल करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Struct से बाँधना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- कॉन्फ़िगरेशन फ़ाइलें पढ़ना
- पर्यावरण चर
- डिफ़ॉल्ट और निगरानी
- Struct से बाँधना