Avatar ·

Go 中的错误 "X does not implement Y (method has a pointer receiver)"

你好!我开始学习 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 中指针会自动