এখানে ইতিমধ্যে ভাল উত্তর আছে। যারা অন্যকে স্বজ্ঞাতভাবে বুঝতে চান তাদের জন্য আমার নিজেরও যুক্ত করুন:
ইন্টারফেস
এখানে একটি পদ্ধতির ইন্টারফেস রয়েছে:
type Runner interface {
Run()
}
সুতরাং যে Run()পদ্ধতিতে কোনও ধরণের রানার ইন্টারফেসটি সন্তুষ্ট করে:
type Program struct {
/* fields */
}
func (p Program) Run() {
/* running */
}
func (p Program) Stop() {
/* stopping */
}
যদিও প্রোগ্রাম টাইপের একটি স্টপ পদ্ধতি রয়েছে তবে এটি রানার ইন্টারফেসকে সন্তুষ্ট করে কারণ এটির জন্য একটি ইন্টারফেসের সমস্ত পদ্ধতি থাকা দরকার।
সুতরাং এটির একটি রান পদ্ধতি রয়েছে এবং এটি রানার ইন্টারফেসটিকে সন্তুষ্ট করে।
খালি ইন্টারফেস
কোনও পদ্ধতি ছাড়াই এখানে নামকরণ করা খালি ইন্টারফেস রয়েছে:
type Empty interface {
/* it has no methods */
}
যে কোনও ধরণের এই ইন্টারফেস সন্তুষ্ট। কারণ, এই ইন্টারফেসটি সন্তুষ্ট করার জন্য কোনও পদ্ধতির প্রয়োজন নেই। উদাহরণ স্বরূপ:
// Because, Empty interface has no methods, following types satisfy the Empty interface
var a Empty
a = 5
a = 6.5
a = "hello"
কিন্তু, উপরের প্রোগ্রামটির ধরণটি কি এটি সন্তুষ্ট করে? হ্যাঁ:
a = Program{} // ok
ইন্টারফেস {} উপরের খালি ইন্টারফেসের সমান।
var b interface{}
// true: a == b
b = a
b = 9
b = "bye"
আপনি দেখতে পাচ্ছেন, এ সম্পর্কে রহস্যজনক কিছু নেই তবে এটি অপব্যবহার করা খুব সহজ। আপনি যতটা পারেন এ থেকে দূরে থাকুন।
https://play.golang.org/p/A-vwTddWJ7G
interface{}কমপক্ষেvoid *সি এর সমতুল্য এটি কোনও কিছুর প্রতি নির্দেশ করতে পারে এবং এটি ব্যবহারের জন্য আপনার কাছে একটি castালাই / প্রকারের দৃ .়তা প্রয়োজন।