go语言因其简单性和并发性等特性受到广大程序猿的喜爱,go还有一个非常厉害的特性就是它的接口特性,众所周知,java若想实现接口就必须得使用interface关键字,这样就增加了代码的耦合,举个例子就像一只小鸟走路像鸭子,游起来泳像鸭子,叫起来更像鸭子,那我们就认为其就是一只鸭子,这个鸭子就像是一个接口,而这只小鸟实现了鸭子的所有特点,所以大家自然而然认为这只小鸟是鸭子,但是不一定只有这只小鸟可以模仿鸭子叫,公鸡也可以学鸭子,只要实现了所有鸭子的特性。
下面我们来看一下具体的代码实现:
package main
import "fmt"
type duke interface {
Cry() string
String() string
}
type duckadd interface {
duke
Add() string
}
type ycfdata struct {
}
type ycfdataadd struct {
}
func (y *ycfdata) Cry() string {
return "哈哈哈哈"
}
func (y *ycfdata) String() string {
return "你是个傻子吧"
}
func (yy *ycfdataadd) Cry() string {
return "咯咯咯咯"
}
func (yy *ycfdataadd) String() string {
return "你是个疯子吧"
}
func (yy *ycfdataadd) Add() string {
return "你是个傻子加疯子吧"
}
func main() {
y := ycfdata{}
a := y.Cry()
b := y.String()
fmt.Println(a)
fmt.Println(b)
yy := ycfdataadd{}
c := yy.Cry()
d := yy.String()
e := yy.Add()
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
}
运行结果:
PS G:\goworkspace\src\shuxiang\service> go run G:\goworkspace\src\练习\lianxi.go
哈哈哈哈
你是个傻子吧
咯咯咯咯
你是个疯子吧
你是个傻子加疯子吧
ycfdata实现了duke这个接口,ycfdataadd实现了dukeadd接口和duke接口。而duckadd继承duke接口,
这是接口的简单运用,接口还可以作为类型去使用,如map类型,定义一个类型如var m map[string] interface,此时这个map数组的值能接收任何类型的值包括被初始化的结构体,接口还有很多的强大的特性需要小伙伴们自己去发现呦