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可以被重新编写为采用函数类型。看见