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数组的值能接收任何类型的值包括被初始化的结构体,接口还有很多的强大的特性需要小伙伴们自己去发现呦

Last modification:June 28th, 2019 at 01:24 pm
如果觉得我的文章对你有用,请随意赞赏