一尘不染

狗不养宠物(说话方式类型错误)

go

我自己找不到问题!谢谢您的帮助,当我将空结构传递给接口接收器的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)

阅读 204

收藏
2020-07-02

共1个答案

一尘不染

您的pets接口需要一个功能speak(name []byte) dog,但是您为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
}

问题是*dogdog是不同的类型。*dog是指向的指针dog

2020-07-02