"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जाँच करना कि क्या कोई प्रकार गो में इंटरफ़ेस को संतुष्ट करता है

जाँच करना कि क्या कोई प्रकार गो में इंटरफ़ेस को संतुष्ट करता है

2024-11-06 को प्रकाशित
ब्राउज़ करें:359

Checking if a Type Satisfies an Interface in Go

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

आपने ऐसा सिंटैक्स देखा होगा

var _ InterfaceName = TypeName{} 
// or 
var _ InterfaceName = (*TypeName)(nil) 

गो कोड में। यह लेख आपको बताएगा कि ये पंक्तियाँ क्या करती हैं और ये क्यों आवश्यक हैं।

गो में इंटरफ़ेस संतुष्टि की जांच कैसे करें

गो में, यह जांचने के लिए कि क्या कोई प्रकार (उदाहरण के लिए, एक संरचना) एक इंटरफ़ेस लागू करता है, आप एक संकलन-समय दावा जोड़ सकते हैं। यह दावा गो कंपाइलर को बताता है, "सुनिश्चित करें कि यह प्रकार इस इंटरफ़ेस को लागू करता है - अभी, रनटाइम पर नहीं।"

इसे करने के दो तरीके हैं:

var _ InterfaceName = TypeName{} 

या, यदि इंटरफ़ेस को पॉइंटर रिसीवर की आवश्यकता है:

var _ InterfaceName = (*TypeName)(nil) 

यदि टाइपनाम इंटरफ़ेसनाम को पूरी तरह से कार्यान्वित नहीं करता है (यानी, यदि इसमें आवश्यक विधियां गायब हैं), तो गो कंपाइलर तुरंत एक त्रुटि उत्पन्न करेगा। यह सरल जांच यह सुनिश्चित करती है कि आपके कोड चलाने से बहुत पहले ही आपके प्रकार उस इंटरफ़ेस का अनुपालन करते हैं जिसे पूरा करने की उनसे अपेक्षा की जाती है।

वैल्यू या पॉइंटर रिसीवर का उपयोग कब करें

TypeName{} और (*TypeName)(nil) के बीच चयन इस बात पर निर्भर करता है कि आपके प्रकार के तरीकों को कैसे परिभाषित किया गया है:

  1. वैल्यू रिसीवर्स: यदि टाइपनेम वैल्यू रिसीवर्स के साथ इंटरफ़ेस विधियों को लागू करता है (उदाहरण के लिए, func (t टाइपनेम) मेथड()), तो आप अपने दावे में टाइपनेम{} या (*टाइपनेम)(शून्य) का उपयोग कर सकते हैं। दोनों विकल्प काम करेंगे क्योंकि गो जरूरत पड़ने पर मानों को पॉइंटर्स में बदल सकता है।
  2. पॉइंटर रिसीवर्स: यदि टाइपनेम पॉइंटर रिसीवर्स के साथ किसी भी तरीके को लागू करता है (उदाहरण के लिए, func (t *TypeName) मेथड()), तो आपको (*टाइपनेम)(शून्य) का उपयोग करना होगा। यह सुनिश्चित करता है कि प्रकार का एक सूचक इंटरफ़ेस को संतुष्ट करता है, क्योंकि केवल एक सूचक ही विधि को कॉल करने में सक्षम होगा।

संकलन-समय इंटरफ़ेस संतुष्टि जाँच के लाभ

संकलन-समय जांच का उपयोग करने से कई लाभ मिलते हैं:

  • संकलन-समय सुरक्षा: यह विधि यह सुनिश्चित करके संभावित समस्याओं को जल्दी पकड़ लेती है कि प्रकार इंटरफ़ेस की सभी आवश्यकताओं को पूरा करते हैं, जिससे आपको रनटाइम पर अप्रिय आश्चर्य से बचने में मदद मिलती है।
  • प्रलेखन साफ़ करें: ये दावे दस्तावेज़ीकरण के रूप में काम करते हैं, जो स्पष्ट रूप से दिखाते हैं कि एक प्रकार से एक विशिष्ट इंटरफ़ेस को लागू करने की उम्मीद की जाती है। आपका कोड पढ़ने वाला कोई भी व्यक्ति तुरंत समझ जाएगा कि इस प्रकार का उद्देश्य इंटरफ़ेस को संतुष्ट करना है, जिससे कोड अधिक पठनीय और रखरखाव योग्य हो जाता है।
  • लचीला कोड रीफैक्टरिंग: इस आश्वासन के साथ, आप आत्मविश्वास से कोड को रीफैक्टर कर सकते हैं या इंटरफ़ेस विधियों को बदल सकते हैं, यह जानते हुए कि किसी भी प्रकार के अनुपालन से बाहर होने पर कंपाइलर आपको सचेत करेगा।

व्यवहार में उदाहरण

आइए इसे ठोस बनाने के लिए एक उदाहरण देखें। मान लीजिए कि हमारे पास एक सरल इंटरफ़ेस आकार और एक संरचना सर्कल है:

type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}

यह सत्यापित करने के लिए कि सर्कल आकार लागू करता है, हम एक संकलन-समय दावा जोड़ सकते हैं:

var _ Shape = Circle{}

या, यदि सर्कल के तरीकों के लिए पॉइंटर रिसीवर की आवश्यकता है:

var _ Shape = (*Circle)(nil)

निष्कर्ष

यह जांचने के लिए संकलन-समय के दावे का उपयोग करना कि क्या कोई प्रकार इंटरफ़ेस को संतुष्ट करता है, गो में सबसे अच्छा अभ्यास है। यह न केवल गारंटी देता है कि प्रकार उनके इंटरफ़ेस अनुबंधों को पूरा करते हैं, रनटाइम त्रुटियों के जोखिम को कम करते हैं, बल्कि कोड पठनीयता और रखरखाव में भी सुधार करते हैं। यह दृष्टिकोण विशेष रूप से बड़े या बहुरूपी कोडबेस में फायदेमंद है जहां इंटरफेस डिजाइन के केंद्र में हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/kittipat1413/checking-if-a-type- satisfies-an-interface-in-go-432n?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163.com पर संपर्क करें। इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3