golang:什么是Golang中的interface

 所属分类:php教程

 浏览:149次-  评论: 0次-  更新时间:2022-09-30
描述:更多教程资料进入php教程获得。 下面由golang教程栏目给大家介绍是Golang中的interface,希望对需要的朋友有所帮助!Golang中的interface先...
更多教程资料进入php教程获得。 下面由golang教程栏目给大家介绍是Golang中的interface,希望对需要的朋友有所帮助!

Golang中的interface

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

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
}

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

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)

php入门到就业线上直播课:立即学习
全程直播 + 实战授课 + 边学 + 边练 + 边辅导

以上就是什么是Golang中的interface的详细内容,更多请关注zzsucai.com其它相关文章!

 标签: interface,Golang,
积分说明:注册即送10金币,每日签到可获得更多金币,成为VIP会员可免金币下载! 充值积分充值会员更多说明»

讨论这个素材(0)回答他人问题或分享使用心得奖励金币

〒_〒 居然一个评论都没有……

表情  文明上网,理性发言!