अपने सबसे सरल रूप में एक इंटरफ़ेस टाइप मेथड सिग्नेचर का एक सेट होता है।
यहाँ एक इंटरफ़ेस की परिभाषा का उदाहरण है जिसमें दो मेथड Add और Value शामिल हैं:
type Counter interface {
Add(increment int)
Value() int
}
increment जैसे पैरामीटर के नाम इंटरफ़ेस की परिभाषा से हटाए जा सकते हैं, लेकिन अक्सर ये पढ़ने में आसानी बढ़ा देते हैं।
Go में इंटरफ़ेस के नाम में Interface या I शब्द नहीं होता।
इसके बजाय ये अक्सर er पर खत्म होते हैं, जैसे Reader, Stringer.
जो भी टाइप इंटरफ़ेस के मेथड बनाता है, वह अपने आप उस इंटरफ़ेस को "लागू" कर देता है।
Go में implements नाम का कोई कीवर्ड नहीं होता।
नीचे दिया गया टाइप ऊपर देखे गए Counter इंटरफ़ेस को लागू करता है।
type Stats struct {
value int
// ...
}
func (s Stats) Add(v int) {
s.value += v
}
func (s Stats) Value() int {
return s.value
}
func (s Stats) SomeOtherMethod() {
// The type can have additional methods not mentioned in the interface.
}
इंटरफ़ेस लागू करने के लिए इससे कोई फर्क नहीं पड़ता कि मेथड का रिसीवर वैल्यू रिसीवर है या पॉइंटर रिसीवर। (अगर इनके बारे में आपको संदेह है, तो मेथड से जुड़े कॉन्सेप्ट दोबारा देख लीजिए।)
इंटरफ़ेस टाइप की एक वैल्यू अपने अंदर वह कोई भी वैल्यू रख सकती है जो उन मेथड को लागू करती हो। [^1]
इसका मतलब है कि अब Stats को हर उस जगह इस्तेमाल किया जा सकता है जहाँ Counter इंटरफ़ेस की अपेक्षा होती है।
func SetUpAnalytics(counter Counter) {
// ...
}
stats := Stats{}
SetUpAnalytics(stats)
// works because Stats implements Counter
चूँकि इंटरफ़ेस अपने आप लागू हो जाते हैं, एक टाइप आसानी से कई इंटरफ़ेस लागू कर सकता है। उसे बस सारे ज़रूरी मेथड बनाने होते हैं।
Go में एक बहुत खास इंटरफ़ेस टाइप है, खाली इंटरफ़ेस, जिसमें एक भी मेथड नहीं होता।
खाली इंटरफ़ेस ऐसे लिखा जाता है: interface{}.
any, interface{} का दूसरा नाम है, और इसका इस्तेमाल ज़्यादा आम है।
चूँकि खाली इंटरफ़ेस में कोई मेथड नहीं होता, हर टाइप उसे अपने आप लागू कर देता है। यह ऐसे फंक्शन बनाने में काम आता है जो सामान्य रूप से कोई भी वैल्यू ले सके। ऐसी स्थिति में फंक्शन का पैरामीटर खाली इंटरफ़ेस टाइप का होता है।
बर्लिन के नए हवाई अड्डे ने अपनी रोबोट लैब के लिए डेवलपर नियुक्त किए हैं और आप वहीं अपनी नौकरी शुरू कर रहे हैं। उनके पास भद्दे और कुछ-कुछ इंसानों जैसे दिखने वाले रोबोट हैं, जिन्हें वे ग्राहक सेवा बेहतर बनाने के लिए इस्तेमाल करने की कोशिश कर रहे हैं।
नौकरी का आपका पहला काम एक प्रोग्राम लिखना है, ताकि सेल्फ-चेक-इन काउंटर पर लोगों के पासपोर्ट स्कैन होने के बाद रोबोट उनका अभिवादन उनकी मातृभाषा में कर सके।
रोबोट को अपनी क्षमताओं पर गर्व है, इसलिए वह हमेशा पहले बताएगा कि वह कौन-सी भाषा बोल सकता है और फिर उस व्यक्ति का अभिवादन करेगा। उदाहरण के लिए, अगर कोई जर्मन पासपोर्ट स्कैन करता है तो रोबोट कहेगा:
I can speak German: Hallo Dietrich!
अलग-अलग भाषाओं का कोड आप खुद नहीं लिखेंगे, इसलिए आपको रोबोट का कोड ऐसे बनाना है कि दूसरे डेवलपर बाद में और भाषाएँ आसानी से जोड़ सकें।
पहले चरण में, दो मेथड वाला एक इंटरफेस Greeter बनाइए।
LanguageName, जो उस भाषा का नाम (एक string) लौटाता है जिसमें रोबोट को आगंतुक का अभिवादन करना है।Greet, जो आगंतुक का नाम (एक string) लेता है और किसी खास भाषा में अभिवादन संदेश वाली एक string लौटाता है।इसके बाद, एक फंक्शन SayHello बनाइए, जो आर्गुमेंट के तौर पर आगंतुक का नाम और ऐसी हर चीज़ लेता है जो Greeter इंटरफेस को लागू करती हो, और मनचाही अभिवादन स्ट्रिंग लौटाता है।
उदाहरण के लिए, जर्मन Greeter के ऐसे इम्प्लीमेंटेशन की कल्पना कीजिए जिसमें LanguageName "German" लौटाता है और Greet "Hallo {name}!" लौटाता है:
SayHello("Dietrich", germanGreeter)
// => "I can speak German: Hallo Dietrich!"
अब आपका काम रोबोट को उन लोगों के लिए काम करवाना है जो इतालवी पासपोर्ट स्कैन करते हैं।
इसके लिए एक struct Italian बनाइए और वे दो मेथड लागू कीजिए जिनकी ज़रूरत इस struct को काम 1 में बनाए गए Greeter इंटरफेस को पूरा करने के लिए है।
आप किसी का इतालवी में "Ciao {name}!" से अभिवादन कर सकते हैं।
दिन का काम खत्म करने से पहले, आपको पुर्तगाली में लोगों का अभिवादन करने की कार्यक्षमता भी पूरी करनी है।
इसके लिए एक struct Portuguese बनाइए और वे दो मेथड यहाँ भी लागू कीजिए जिनकी ज़रूरत इस struct को Greeter इंटरफेस पूरा करने के लिए है।
आप किसी का पुर्तगाली में "Olá {name}!" से अभिवादन कर सकते हैं।
Exercism पर साइन अप कीजिए और Go को 34 कॉन्सेप्ट166 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।