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()用作值
我做错了什么?
答案 0 :(得分:3)
该接口不用作值。您正在使用一个不返回任何值的函数调用。
speak()
什么都不返回......所以你期望它打印什么?
答案 1 :(得分:1)
此答案基于以上所有答案, 修改以下功能
之前
func animal_speak(a animal) {
fmt.Println(a.speak())
}
之后
func animal_speak(a animal) {
a.speak()
}
答案 2 :(得分:0)
由于您正在打印speak方法的输出,因此您的speak方法需要返回一个字符串或一个对象,其字符串表示将打印您想要查看的字符串。这是您的程序修改https://play.golang.org/p/VDsp0cjXBd-以返回字符串。