本文摘自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》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 什么是Golang中的interface