本文摘自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-zero 是如何追踪你的请求链路?
golang的多态
go html/template
2021-03-10 面试问题
beego-vue-admin基于当前流行技术组合的前后端rbac管理系统:go1.15.x+beego2.x+jwt+redis+mysql8+vue 的前后端分离系统,权限控制采用 rbac,支持
golang基础数据类型-浮点型
golang如何实现收发邮件?
阿里云go开发环境搭建过程
golang panic可以捕获标准错误吗
golang怎么判断数组是否为空
更多相关阅读请进入《interface》频道 >>
老貘
一个与时俱进的Go编程知识库。
转载请注明出处:木庄网络博客 » 什么是Golang中的interface