我正在尝试了解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
运行时,控制台中没有任何内容。我做错了什么?
答案 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()
时进行打印,可以使用Printf
包fmt
函数。
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()
}