什么是Golang中的interface


本文摘自php中文网,作者藏色散人,侵删。

下面由golang教程栏目给大家介绍是Golang中的interface,希望对需要的朋友有所帮助!

Golang中的interface

先说说接口,接口我理解为一些行为的集合。似乎还是很懵x。来看看代码和允许效果,再说。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package main

import "fmt"

type TypeCalculator interface {

    TypeCal() string

}

type Worker struct {

    Type int

    Name string

}

type Student struct {

    Name string

}

func (w Worker) TypeCal() string {

    if w.Type == 0 {

        return w.Name +"是蓝翔毕业的员工"

    } else {

        return w.Name+"不是蓝翔毕业的员工"

    }

}

func (s Student) TypeCal() string  {

    return s.Name + "还在蓝翔学挖掘机炒菜"

}

func main() {

    worker := Worker{Type:0, Name:"小华"}

    student := Student{Name:"小明"}

    workers := []TypeCalculator{worker, student}

    for _, v := range workers {

        fmt.Println(v.TypeCal())

    }

}

//运行效果

//小华是蓝翔毕业的员工

//小明还在蓝翔学挖掘机炒菜

开始解(xia)释(bai)

首先我们写了一个interface,里面有个待实现的方法TypeCal()

type TypeCalculator interface {

    TypeCal() string

}

又写了两个结构体Worker和Student

type Worker struct {

    Type int

    Name string

}

type Student struct {

    Name string

}

分别为他们实现了一个与结构体中同名的函数

1

2

3

4

5

6

7

8

9

10

func (w Worker) TypeCal() string {

    if w.Type == 0 {

        return w.Name +"是蓝翔毕业的员工"

    } else {

        return w.Name+"不是蓝翔毕业的员工"

    }

}

func (s Student) TypeCal() string  {

    return s.Name + "还在蓝翔学挖掘机炒菜"

}

分别创建worker和student的实例

1

2

worker := Worker{Type:0, Name:"小华"}

student := Student{Name:"小明"}

来来来,重点来了,把这两个实例放同一个TypeCalculator的切片中

1

workers := []TypeCalculator{worker, student}

遍历这个切片,并调用切片中的函数打印结果

1

2

3

for _, v := range workers {

    fmt.Println(v.TypeCal())

}

简单分析

从结果上看,确实是不同的实例调用的是各自的函数,这个函数和interface中的函数名和返回值是相同的。那么加入要是某个实例没有实现interface中的函数呢?当把Student对应的函数注释掉,然后再运行程序,程序报错如下(用我的散装英语翻译就是,Student 没有实现TypeCalculator,TypeCal这个函数/方法找不到)

1

Student does not implement TypeCalculator (missing TypeCal method)

以上就是什么是Golang中的interface的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

go语言都用什么框架

golang环形单项链表

golang和go语言有区别吗?

golang sync.waitgroup 在for循环内取值错误

专业技能:熟练安装各种软件???

手撸golang go与微服务 grpc

云边端架构easydss内go语言如何生成归档文件?

golang base64字符串的编码和解码

json序列化在golang中的应用

详解使用air自动重载代码

更多相关阅读请进入《interface》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...