में इंटरफ़ेस का उपयोग मैं सरल गो (भाषा) में इसका उपयोग करने के उदाहरण के साथ इंटरफ़ेस प्रकार को समझना चाहता हूं।गो
मैंने वेब प्रलेखन पढ़ा, लेकिन मुझे यह नहीं मिला।
में इंटरफ़ेस का उपयोग मैं सरल गो (भाषा) में इसका उपयोग करने के उदाहरण के साथ इंटरफ़ेस प्रकार को समझना चाहता हूं।गो
मैंने वेब प्रलेखन पढ़ा, लेकिन मुझे यह नहीं मिला।
इंटरफ़ेस जाने के पीछे विचार duck typing है। जो बस इसमें अनुवाद करता है: यदि आप एक बतख की तरह दिखते हैं और बतख की तरह रैक करते हैं तो आप एक बतख हैं। मतलब यह है कि यदि आपका ऑब्जेक्ट सभी बतख की सुविधाओं को लागू करता है तो उसे बतख के रूप में उपयोग करने में कोई समस्या नहीं होनी चाहिए।
package main
import (
"fmt"
)
type Walker interface {
Walk() string
}
type Human string
type Dog string
func (human Human) Walk() string { //A human is a walker
return "I'm a man and I walked!"
}
func (dog Dog) Walk() string { //A dog is a walker
return "I'm a dog and I walked!"
}
//Make a walker walk
func MakeWalk(w Walker) {
fmt.Println(w.Walk())
}
func main() {
var human Human
var dog Dog
MakeWalk(human)
MakeWalk(dog)
}
यहाँ एक Human
एक Walker
है और एक Dog
एक Walker
है: यहाँ एक उदाहरण है। क्यूं कर? क्योंकि वे दोनों .. अच्छी तरह से ... Walk
। वे दोनों Walk() string
फ़ंक्शन को लागू करते हैं। तो यही कारण है कि आप उन पर MakeWalk
निष्पादित कर सकते हैं।
यह बहुत उपयोगी है जब आप अलग-अलग प्रकारों से व्यवहार करना चाहते हैं। एक व्यावहारिक उदाहरण फ़ाइल प्रकार ऑब्जेक्ट्स (सॉकेट, फ़ाइल ऑब्जेक्ट्स) होगा - आपको उन सभी पर एक लिखें और एक रीड फ़ंक्शन चाहिए। फिर आप अपने प्रकार से स्वतंत्र एक ही फैशन में लिखें और पढ़ें का उपयोग कर सकते हैं - जो कि अच्छा है।
धन्यवाद! यह वास्तव में मैं जानना चाहता था। जाओ ट्यूटोरियल की तुलना में बहुत स्पष्ट है। – Speccy
गोलांग के संदर्भ में अंतरफलक क्या लाभ देते हैं? यदि मैं 2 ऑब्जेक्ट्स के लिए इंटरफेस का उपयोग कर रहा हूं, और मेरे इंटरफ़ेस में 3 विधियां हैं, तो क्या इसका मतलब है कि मेरी 2 ऑब्जेक्ट्स को इन 3 विधियों को लागू करना चाहिए? – Avdept
@Avdept हां, आपको अपने प्रकार के इंटरफ़ेस के समान हस्ताक्षर लागू करना होगा। सुनिश्चित नहीं है कि लाभ से आपका क्या मतलब है। –
एक और काम कर रहे उदाहरण एक अंतरफलक और एक संरचना
package main
import "fmt"
type Info interface {
Noofchar() int
Increment()
}
type Testinfo struct {
noofchar int
}
func (x *Testinfo) Noofchar() int {
return x.noofchar
}
func (x *Testinfo) Increment() {
x.noofchar++
}
func main(){
var t Info = &Testinfo{noofchar:1}
fmt.Println("No of char ",t.Noofchar())
t.Increment()
fmt.Println("No of char ",t.Noofchar())
}
आप एक necromancer हैं :) – Speccy
आप डॉक्स में इस पढ़ी के बीच बातचीत दिखा ?? http://golang.org/doc/effective_go.html#interfaces_and_types। यह भी एक कोशिश करें http://diveintogo.blogspot.com/2010/03/classic-inheritance-in-go-lang.html – Justin
हाँ, मैंने दस्तावेज़ पढ़े ... लिंक के लिए धन्यवाद – Speccy