我自己找不到问题!谢谢您的帮助,当我将空结构传递给接口接收器的getPets()时,我期望该结构返回一个空引用,但我却收到了此错误狗没有实现pets(语音类型错误)方法)我现在不知道6个小时了
import "fmt" type pets interface { speak(name []byte) dog } type dog struct { dogs []string name string } type cat struct { cats []string name string } func (d *dog) speak(name []byte) *dog { (*d).dogs = append(d.dogs, string(name)) return d } // func (c *cat) speak(name []byte) *cat { // (*c).cats = append(c.cats, string(name)) // return c // } func getPets(f pets) { fmt.Println(f.speak([]byte("hello"))) } func main() { d := dog{} getPets(d)
您的pets接口需要一个功能speak(name []byte) dog,但是您为dog类型编写的功能是speak(name []byte) *dog。
speak(name []byte) dog
speak(name []byte) *dog
func (d *dog) speak(name []byte) dog { d.dogs = append(d.dogs, string(name)) return *d }
要么
type pets interface { speak(name []byte) *dog } type dog struct { dogs []string name string } func (d *dog) speak(name []byte) *dog { d.dogs = append(d.dogs, string(name)) return d }
问题是*dog和dog是不同的类型。*dog是指向的指针dog。
*dog
dog