Avatar ·

त्रुटि "पॉइंटर टू इंटरफ़ेस, नॉट इंटरफ़ेस": Go में इंटरफ़ेस को सही तरीके से कैसे पास करें?

सभी को नमस्ते! मैं Go में नया हूँ और एक समझ से परे कंपाइलेशन त्रुटि का सामना कर रहा हूँ: «*MyInterface is pointer to interface, not interface»। \n\nमेरे पास एक इंटरफ़ेस और एक स्ट्रक्चर है जो इसे इम्प्लीमेंट करता है:\n\n```go\ntype Animal interface {\n Speak() string\n}\n\ntype Dog struct{}\n\nfunc (d *Dog) Speak() string {\n return "Woof!"\n}\n```\n\nमैं स्ट्रक्चर पर एक पॉइंटर को एक फंक्शन में पास करना चाहता हूँ जो इंटरफ़ेस को स्वीकार करता है:\n\n```go\nfunc MakeSound(a Animal) {\n fmt.Println(a.Speak())\n}\n\nfunc main() {\n dog := &Dog{}\n MakeSound(dog) // काम करता है\n}\n```\n\nलेकिन अगर मैं **इंटरफ़ेस पर पॉइंटर** (किसी कारण से) पास करने की कोशिश करता हूँ, तो मुझे त्रुटि मिलती है:\n\n```go\nfunc main() {\n var animalInterface Animal\n animalInterface = &Dog{}\n MakeSound(&animalInterface) // त्रुटि: cannot use &animalInterface as type Animal in argument to MakeSound: *Animal is pointer to interface, not interface\n}\n```\n\nमैं समझता हूँ कि Go में इंटरफ़ेस पहले से ही रेफरेंस टाइप हैं, लेकिन मैं यह समझना चाहता हूँ कि यह त्रुटि क्यों होती है और इंटरफ़ेस पर पॉइंटर का उपयोग कब करना चाहिए (यदि कभी करना चाहिए)? क्या कोई ऐसी स्थिति है जहाँ *Animal का उपयोग उचित हो? या क्या यह हमेशा एक एंटी-पैटर्न है?