golang接口“用作值”错误

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)

}

When I call the animal interface it gives me the following error

./interface.go:28:21: a.speak() used as value

What am I doing wrong?

Link to playground

The interface is not used as a value. You're using a function call that returns nothing as a value.

speak() returns nothing... so what do you expect it to print?

Since you are printing the output of speak method, your speak method needs to return a string or an object whose string representation would print a string you would like to see. Here's your program modified https://play.golang.org/p/VDsp0cjXBd- to return a string.