خطأ "X does not implement Y (method has a pointer receiver)" في Go
مرحبًا! بدأت تعلم Go وواجهت خطأ غريبًا عند العمل مع الواجهات. لدي واجهة بسيطة `Speaker` مع طريقة `Speak()`، وهيكل `Dog` الذي ينفذ هذه الطريقة. ولكن عندما أحاول تمرير قيمة `Dog` إلى دالة تنتظر `Speaker`، يعطيني المترجم الخطأ التالي:
```
cannot use dog (variable of type Dog) as Speaker value in argument to makeSpeak: Dog does not implement Speaker (method Speak has a pointer receiver)
```
إليك الكود الخاص بي:
```go
package main
import "fmt"
type Speaker interface {
Speak() string
}
type Dog struct {
Name string
}
func (d *Dog) Speak() string {
return "Гав! Я " + d.Name
}
func makeSpeak(s Speaker) {
fmt.Println(s.Speak())
}
func main() {
dog := Dog{Name: "Бобик"}
makeSpeak(dog) // خطأ!
}
```
أفهم أن الخطأ مرتبط بأن طريقة `Speak` معرفة على المؤشر (`*Dog`)، وليس على القيمة (`Dog`). ولكن لماذا هذه مشكلة؟ ففي Go المؤشرات تلقائيًا