golang interface"用作值"错误

时间:2017-12-26 11:17:47

标签: go

package main

import (
    "fmt"
)

type animal interface {
    speak()
}

type dog struct {
    name, sound  string
}

type cat struct {
    name, sound  string
}

func (d dog) speak() {
    fmt.Println(d.name, " goes ", d.sound)
}

func (c cat) speak() {
    fmt.Println(c.name, " goes ", c.sound)
}

func animal_speak(a animal) {
    fmt.Println(a.speak())
}

func main() {

    dogo := dog{"scooby", "woof"}
    cato := cat{"garfield", "meow"}

    animal_speak(dogo)
    animal_speak(cato)

}

当我调用动物界面时,它会给我以下错误

  

./ interface.go:28:21:a.speak()用作值

我做错了什么?

Link to playground

3 个答案:

答案 0 :(得分:3)

该接口不用作值。您正在使用一个不返回任何值的函数调用。

speak()什么都不返回......所以你期望它打印什么?

答案 1 :(得分:1)

此答案基于以上所有答案, 修改以下功能

之前

   func animal_speak(a animal) {
        fmt.Println(a.speak())
    }

之后

func animal_speak(a animal) {
    a.speak()
}

Playgorund Link

答案 2 :(得分:0)

由于您正在打印speak方法的输出,因此您的speak方法需要返回一个字符串或一个对象,其字符串表示将打印您想要查看的字符串。这是您的程序修改https://play.golang.org/p/VDsp0cjXBd-以返回字符串。