栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

什么是Golang中的interface

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

什么是Golang中的interface

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

Golang中的interface

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

package mainimport "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和Studenttype 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 + "还在蓝翔学挖掘机炒菜"}

分别创建worker和student的实例

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

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

workers := []TypeCalculator{worker, student}

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

for _, v := range workers {    fmt.Println(v.TypeCal())}

简单分析

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

 Student does not implement TypeCalculator (missing TypeCal method)

以上就是什么是Golang中的interface的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/793766.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号