Go 中的错误 "X does not implement Y (method has a pointer receiver)"
大家好!我刚开始学习 Go,遇到了一个无法理解的错误。我有一个接口和一个结构体,我认为它实现了该接口。但编译器说没有。
这是我的代码:
```go
package main
import "fmt"
type Greeter interface {
Greet() string
}
type Person struct {
Name string
}
func (p *Person) Greet() string {
return "Hello, " + p.Name
}
func sayHello(g Greeter) {
fmt.Println(g.Greet())
}
func main() {
p := Person{Name: "Alice"}
sayHello(p) // 错误:Person does not implement Greeter (method Greet has pointer receiver)
}
```
错误信息:`Person does not implement Greeter (method Greet has pointer receiver)`。我理解方法 `Greet()` 是在指针 `*Person` 上定义的,而不是在 `Person` 上。但 Go 难道不应该自动将值转换为指针吗?在其他语言中这是可行的。
在这种情况下如何正确实现接口?是否总是需要使用指针?