golang接口“用作值”错误

问题描述 投票:-3回答:2
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

go
2个回答
3
投票

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

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.