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 中指针会自动