Go विधि में डिफ़ॉल्ट मान कैसे पास करें: 5 वास्तविक समाधान

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

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

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

Go में डिफ़ॉल्ट पैरामीटर क्यों नहीं हैं (और यह अच्छा है)

\n\n

कल्पना करें: आप Go में लिख रहे हैं और एक ऐसी विधि बनाना चाहते हैं जिसमें एक पैरामीटर हो जिसे आप निर्दिष्ट न कर सकें। जैसे Python में: def greet(name="अतिथि")। आप कीबोर्ड उठाते हैं, लिखते हैं:

\n\n
func (u *User) Greet(message string = "नमस्ते") string {\n    return message + ", " + u.Name\n}
\n\n

और Go एक त्रुटि देता है। कंपाइलर लाल हो जाता है, लेकिन इसे पास नहीं होने देता। परिचित लगता है? यह प्रश्न (Stack Overflow पर मूल ने हज़ारों बार देखा गया) Go में हर दूसरे शुरुआती को परेशान करता है। भाषा के डेवलपर्स ने जानबूझकर डिफ़ॉल्ट मानों को छोड़ दिया। क्यों? क्योंकि Go स्पष्टता की भाषा है। कोड पठनीयता संक्षिप्तता से अधिक महत्वपूर्ण है। लेकिन इसका मतलब यह नहीं है कि आप Go में डिफ़ॉल्ट मान का अनुकरण नहीं कर सकते। कम से कम 5 सुरुचिपूर्ण तरीके हैं। आइए प्रत्येक पर चर्चा करें।

\n\n

तरीका 1: विभिन्न फ़ंक्शनों के माध्यम से ओवरलोडिंग (Go-तरीका)

\n\n

सबसे सरल और "Go-जैसा" दृष्टिकोण बस दो फ़ंक्शन बनाना है। एक पैरामीटर के साथ, दूसरा बिना।

\n\n
type Config struct {\n    Timeout int\n}\n\nfunc NewDefaultConfig() *Config {\n    return &Config{Timeout: 30} // डिफ़ॉल्ट मान\n}\n\nfunc NewConfig(timeout int) *Config {\n    if timeout <= 0 {\n        timeout = 30 // मूर्खता से सुरक्षा\n    }\n    return &Config{Timeout: timeout}\n}
\n\n

लाभ: अत्यंत स्पष्ट, एक सेकंड में पढ़ा जा सकता है।
\nनुकसान: 3-4 पैरामीटर होने पर फ़ंक्शनों का विस्फोट होगा।

\n\n

तरीका 2: कंस्ट्रक्टर के साथ संरचना (Builder Pattern)

\n\n

जब पैरामीटर अधिक (3+) हों, तो Builder पैटर्न मदद करता है। Go में वैकल्पिक पैरामीटर के साथ काम करने के लिए यह एक मानक मुहावरा है।

\n\n
type Server struct {\n    Host    string\n    Port    int\n    Timeout time.Duration\n    MaxConn int\n}\n\n// डिफ़ॉल्ट मान\nfunc NewServer() *Server {\n    return &Server{\n        Host:    "localhost",\n        Port:    8080,\n        Timeout: 30 * time.Second,\n        MaxConn: 100,\n    }\n}\n\n// सेटर विधियाँ स्वयं ऑब्जेक्ट लौटाती हैं\nfunc (s *Server) WithHost(host string) *Server {\n    s.Host = host\n    return s\n}\n\nfunc (s *Server) WithPort(port int) *Server {\n    s.Port = port\n    return s\n}\n\n// उपयोग\nserver := NewServer().\n    WithPort(9090).\n    WithTimeout(10 * time.Second)
\n\n

यह पैटर्न Go की मानक लाइब्रेरी (जैसे, http.Server) में सक्रिय रूप से उपयोग किया जाता है। यह हैक के बिना Go के डिफ़ॉल्ट पैरामीटर की समस्या को हल करता है।

\n\n

तरीका 3: Variadic parameters (अप्रत्याशित चाल)

\n\n

आप वैरिएडिक पैरामीटर (चिह्न ...) का उपयोग कर सकते हैं। यह एक वैकल्पिक पैरामीटर के लिए एक गैर-स्पष्ट लेकिन काम करने वाली तरकीब है।

\n\n
func Greet(name string, opts ...string) string {\n    greeting := "नमस्ते" // डिफ़ॉल्ट मान\n    if len(opts) > 0 {\n        greeting = opts[0]\n    }\n    return greeting + ", " + name\n}\n\n// उपयोग\nfmt.Println(Greet("इवान"))           // "नमस्ते, इवान"\nfmt.Println(Greet("मारिया", "आदाब")) // "आदाब, मारिया"
\n\n

यह काम करता है, लेकिन एक पैच की तरह दिखता है। केवल तभी उपयोग करें जब आपको त्वरित समाधान की आवश्यकता हो।

\n\n

तरीका 4: Functional Options (सबसे Go-जैसा)

\n\n

यह Go डेवलपर्स की मुख्य तरकीब है। पहली बार डेव चेनी द्वारा लोकप्रिय बनाया गया। यह किसी भी संख्या में पैरामीटर के लिए Go में डिफ़ॉल्ट मान सेट करने की अनुमति देता है।

\n\n
type Option func(*Client)\n\ntype Client struct {\n    URL     string\n    Timeout time.Duration\n    Retries int\n}\n\n// डिफ़ॉल्ट मान\nfunc defaultClient() *Client {\n    return &Client{\n        URL:     "https://api.example.com",\n        Timeout: 10 * time.Second,\n        Retries: 3,\n    }\n}\n\n// विकल्प\nfunc WithURL(url string) Option {\n    return func(c *Client) {\n        c.URL = url\n    }\n}\n\nfunc WithTimeout(t time.Duration) Option {\n    return func(c *Client) {\n                

ब्लॉग

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