Avatar ·

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 难道不应该自动将值转换为指针吗?在其他语言中这是可行的。 在这种情况下如何正确实现接口?是否总是需要使用指针?