इंटरफ़ेस परिभाषित करना और लागू करना
निहित संतुष्टि और रिक्त इंटरफ़ेस
इंटरफ़ेस परिभाषित करना और लागू करना, CoddyKit पर Go Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Go Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
इंटरफ़ेस क्या है
Go में इंटरफ़ेस मेथड हस्ताक्षरों का एक समूह होता है। जो भी प्रकार उन सभी मेथड को लागू करता है, वह अंतर्निहित रूप से इंटरफ़ेस का अनुपालन करता है — implements कीवर्ड की आवश्यकता नहीं होती। इसे संरचनात्मक टाइपिंग या डक टाइपिंग कहते हैं।
इंटरफ़ेस घोषित करना
type कीवर्ड से इंटरफ़ेस परिभाषित करें:
package main
import "fmt"
type Shape interface {
Area() float64
Perimeter() float64
}
type Circle struct{ Radius float64 }
func (c Circle) Area() float64 { return 3.14159 * c.Radius * c.Radius }
func (c Circle) Perimeter() float64 { return 2 * 3.14159 * c.Radius }
func main() {
var s Shape = Circle{5}
fmt.Printf("Area: %.2f\n", s.Area())
}अंतर्निहित अनुपालन
इरादे की कोई घोषणा आवश्यक नहीं होती। यदि किसी प्रकार में सही मेथड हैं, तो वह अपने-आप इंटरफ़ेस का अनुपालन करता है:
package main
import "fmt"
type Greeter interface{ Greet() string }
type English struct{}
func (e English) Greet() string { return "Hello" }
type Spanish struct{}
func (s Spanish) Greet() string { return "Hola" }
func say(g Greeter) { fmt.Println(g.Greet()) }
func main() {
say(English{})
say(Spanish{})
}रिक्त इंटरफ़ेस
interface{} (या Go 1.18+ में any) का अनुपालन हर प्रकार करता है। इसका उपयोग तब किया जाता है जब कंपाइल समय पर प्रकार अज्ञात हो:
package main
import "fmt"
func printAny(v any) { fmt.Printf("%T: %v\n", v, v) }
func main() {
printAny(42)
printAny("hello")
printAny([]int{1,2,3})
}इंटरफ़ेस वैल्यू
इंटरफ़ेस वैल्यू में दो चीज़ें होती हैं: एक ठोस प्रकार और एक ठोस मान। nil इंटरफ़ेस में दोनों nil पर सेट होते हैं:
package main
import "fmt"
type Animal interface{ Sound() string }
type Dog struct{}
func (d Dog) Sound() string { return "woof" }
func main() {
var a Animal
fmt.Println(a == nil) // true
a = Dog{}
fmt.Println(a == nil) // false
fmt.Println(a.Sound())
}अनेक इंटरफ़ेस का अनुपालन
कोई प्रकार एक ही समय में अनेक इंटरफ़ेस का अनुपालन कर सकता है:
package main
import "fmt"
type Reader interface{ Read() string }
type Writer interface{ Write(string) }
type ReadWriter interface{ Reader; Writer }
type File struct{ content string }
func (f *File) Read() string { return f.content }
func (f *File) Write(s string) { f.content = s }
func main() {
var rw ReadWriter = &File{}
rw.Write("hello")
fmt.Println(rw.Read())
}इंटरफ़ेस में मान देना
एक व्यापक इंटरफ़ेस में संकीर्ण ठोस मान रखा जा सकता है। इंटरफ़ेस प्रकारों के बीच मान देने के लिए ठोस प्रकार का दोनों इंटरफ़ेस का अनुपालन करना आवश्यक है:
package main
import "fmt"
type Stringer interface{ String() string }
type Point struct{ X, Y int }
func (p Point) String() string { return fmt.Sprintf("(%d,%d)", p.X, p.Y) }
func main() {
var s Stringer = Point{3, 4}
fmt.Println(s.String())
}nil इंटरफ़ेस की समस्या
nil ठोस मान रखने वाला non-nil इंटरफ़ेस nil के बराबर NOT होता है:
package main
import "fmt"
type MyErr struct{}
func (e *MyErr) Error() string { return "oops" }
func bad() error {
var e *MyErr // nil pointer
return e // returns non-nil interface!
}
func main() {
err := bad()
fmt.Println(err == nil) // false — common gotcha
}इंटरफ़ेस से परीक्षण-योग्यता
निर्भरताओं को इंटरफ़ेस के रूप में परिभाषित करने से परीक्षणों में वास्तविक कार्यान्वयन के स्थान पर नकली कार्यान्वयन लगाए जा सकते हैं:
package main
import "fmt"
type EmailSender interface{ Send(to, body string) error }
type MockSender struct{ Sent []string }
func (m *MockSender) Send(to, body string) error {
m.Sent = append(m.Sent, to)
return nil
}
func notify(s EmailSender, addr string) { s.Send(addr, "hello") }
func main() {
mock := &MockSender{}
notify(mock, "a@b.com")
fmt.Println(mock.Sent) // [a@b.com]
}इंटरफ़ेस स्वीकार करें, स्ट्रक्चर लौटाएँ
Go की एक सर्वोत्तम विधि है: फ़ंक्शन पैरामीटर इंटरफ़ेस होने चाहिए (लचीलेपन के लिए), जबकि वापसी प्रकार ठोस प्रकार होने चाहिए (ताकि कॉलर को पता हो कि उसे क्या मिलेगा):
package main
type Logger interface{ Log(string) }
type FileLogger struct{}
func (f *FileLogger) Log(s string) {}
func NewFileLogger() *FileLogger { // returns concrete
return &FileLogger{}
}
func process(l Logger) {} // accepts interface
func main() { process(NewFileLogger()) }इंटरफ़ेस छोटे रखें
Go की मानक लाइब्रेरी बहुत छोटे इंटरफ़ेस को प्राथमिकता देती है: io.Reader में एक मेथड है और io.Writer में भी एक मेथड है। छोटे इंटरफ़ेस अधिक आसानी से संयोजित किए जा सकते हैं और उनका नकली रूप बनाना आसान होता है।
त्वरित जाँच
क्या किसी प्रकार को यह घोषित करना आवश्यक है कि वह किसी इंटरफ़ेस को लागू करता है?
सारांश: इंटरफ़ेस
मुख्य बातें:
- इंटरफ़ेस डेटा नहीं, व्यवहार परिभाषित करते हैं
- अनुपालन अंतर्निहित होता है —
implementsकीवर्ड नहीं होता - रिक्त इंटरफ़ेस (
any) हर प्रकार को स्वीकार करता है - nil इंटरफ़ेस की समस्या से सावधान रहें
- इंटरफ़ेस छोटे और केंद्रित रखें
अभ्यास प्रश्न
Save(key, value string) error और Load(key string) (string, error) वाले Storage इंटरफ़ेस को परिभाषित करें। इसे मैप पर आधारित MemStorage से लागू करें और उसका परीक्षण करें।
एआई शिक्षक के साथ Go सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “इंटरफ़ेस परिभाषित करना और लागू करना” पाठ निःशुल्क है?
हाँ — Go Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “इंटरफ़ेस परिभाषित करना और लागू करना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Go Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“इंटरफ़ेस परिभाषित करना और लागू करना” में मैं क्या सीखूँगा?
निहित संतुष्टि और रिक्त इंटरफ़ेस आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Go Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Go Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Go Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“इंटरफ़ेस परिभाषित करना और लागू करना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Go Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Go Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- इंटरफ़ेस परिभाषित करना और लागू करना
- मानक लाइब्रेरी के मुख्य इंटरफ़ेस
- प्रकार अभिकथन और प्रकार स्विच
- इंटरफ़ेस संयोजन और सर्वोत्तम अभ्यास