了解Golang中的接口

时间:2018-02-19 04:33:32

标签: function go interface stdout

我正在尝试了解Go中的接口。我写了这个:

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运行时,控制台中没有任何内容。我做错了什么?

3 个答案:

答案 0 :(得分:2)

您没有打印结果。将主要内容更改为

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

    fmt.Println(Dog.ShowAbility())
}

FYI:fmt.Sprintf()返回一个字符串,不会将其打印到标准输出

  

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

答案 1 :(得分:0)

您正在从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()
}

答案 2 :(得分:0)

您正在使用的fmt.Sprintf实际上就像Scanf返回值一样。您需要将该值分配给变量并打印输出。

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

    output := Dog.ShowAbility()
    fmt.Println(output)
}

如果您想在调用函数ShowAbility()时进行打印,可以使用Printffmt函数。

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()
}
相关问题