Function 了解Golang中的接口

Function 了解Golang中的接口,function,go,interface,stdout,Function,Go,Interface,Stdout,我试图理解围棋中的接口。我写道: package main import "fmt" type Animal struct { Name string Ability string } type AbilityShower interface { ShowAbility() string } func (a Animal) ShowAbility() string { return fmt.Sprintf("%s can %s", a.Name, a

我试图理解围棋中的接口。我写道:

package main

import "fmt"

type Animal struct {
    Name    string
    Ability string
}

type AbilityShower interface {
    ShowAbility() string
}

func (a Animal) ShowAbility() string {
    return fmt.Sprintf("%s can %s", a.Name, a.Ability)
}

func main() {
    var Dog Animal = Animal{
        Name:    "Dog",
        Ability: "Walk",
    }

    Dog.ShowAbility()
}

但是当我使用
go run main.go运行时,控制台中不会显示任何内容。我做错了什么?

您没有打印结果。将主菜单更改为

func main() {
    var Dog Animal = Animal{
        Name:    "Dog",
        Ability: "Walk",
    }

    fmt.Println(Dog.ShowAbility())
}
仅供参考:fmt.Sprintf()返回字符串,不会将其打印到标准输出

//Sprintf根据格式说明符格式化并返回 结果字符串


您正在从ShowAbility方法返回一个字符串,但没有输出它

package main

import "fmt"

type Animal struct {
    Name    string
    Ability string
}

type AbilityShower interface {
    ShowAbility() 
}

func (a Animal) ShowAbility() {
    fmt.Printf("%s can %s", a.Name, a.Ability)
}

func main() {
   var Dog Animal = Animal{
       Name:    "Dog",
       Ability: "Walk",
   }

   Dog.ShowAbility()
}

这里您使用的是
fmt.Sprintf
,它的实际工作原理类似于
Scanf
返回值。您需要将该值指定给变量并打印输出

func main() {
    var Dog Animal = Animal{
        Name:    "Dog",
        Ability: "Walk",
    }

    output := Dog.ShowAbility()
    fmt.Println(output)
}
如果在调用函数
ShowAbility()
时要打印,可以使用
fmt
软件包的
Printf
函数

func (a Animal) ShowAbility() {
    fmt.Printf("%s can %s", a.Name, a.Ability)
}

func main() {
    var Dog Animal = Animal{
        Name:    "Dog",
        Ability: "Walk",
    }

    Dog.ShowAbility()
}

这会导致“返回的参数太多”,因为
Printf
返回一个
(int,error)
,而我的函数只需要一个
字符串。我从ShowAbility()中删除了“return”语句(和返回类型),这就是为什么在我上面的代码中没有出现这个错误。可能值得注意的是,采用一种方法
接口的API可以被重新编写为采用函数类型。看见