Go Language Tutorial में, वे बताते हैं कि इंटरफेस कैसे काम करता है:
जाओ के पास कक्षाएं नहीं हैं। हालांकि, आप संरचनात्मक प्रकारों पर विधियों को परिभाषित कर सकते हैं। विधि रिसीवर समारोह कीवर्ड और विधि नाम के बीच अपनी ही तर्क सूची में प्रकट होता है।
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
एक इंटरफ़ेस प्रकार विधियों के एक सेट द्वारा परिभाषित किया गया है। इंटरफ़ेस प्रकार का एक मूल्य उन विधियों को लागू करने वाले किसी भी मूल्य को पकड़ सकता है।
गो में इंटरफेस बनाने का यह एकमात्र तरीका है। Google आगे बताता है कि:
एक प्रकार विधियों को लागू करके एक इंटरफ़ेस को लागू करता है। आशय की स्पष्ट घोषणा [यानी
interface
घोषणाएँ] नहीं है।इंप्लिक्ट इंटरफेस उन पैकेजों से कार्यान्वयन पैकेजों को अलग करते हैं जो इंटरफेस को परिभाषित करते हैं: न तो दूसरे पर निर्भर करता है।
यह सटीक इंटरफेस की परिभाषा को भी प्रोत्साहित करता है, क्योंकि आपको हर कार्यान्वयन को खोजने और नए इंटरफ़ेस नाम के साथ टैग करने की आवश्यकता नहीं है।
यह सब सी # में एक्सटेंशन मेथड्स की तरह संदिग्ध लगता है , सिवाय इसके कि गो में विधिपूर्वक बहुरूपिया हैं; वे किसी भी प्रकार पर काम करेंगे जो उन्हें लागू करता है।
Google का दावा है कि यह तेजी से विकास को प्रोत्साहित करता है, लेकिन क्यों? क्या आप C # में स्पष्ट इंटरफेस से दूर जाकर कुछ छोड़ देते हैं? क्या C # में एक्सटेंशन मेथड्स से किसी को कुछ लाभ प्राप्त करने की अनुमति मिल सकती है?