内容简介:先说说接口,接口我理解为一些行为的集合。似乎还是很懵x。来看看代码和允许效果,再说。从结果上看,确实是不同的实例调用的是各自的函数,这个函数和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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
结构化计算机组成
Andrew S.Tanenbaum / 刘卫东 / 机械工业出版社 / 2001-10-1 / 46.00
AndrewcS.Tanenbaum获得过美国麻省理工学院的理学学士学位和加利福尼亚大学伯克利分校的哲学博士学位,目前是荷兰阿姆斯特丹Vrije大学计算机科学系的教授,并领导着一个计算机系统的研究小组.同时,他还是一所计算与图像处理学院的院长,这是由几所大学合作成立的研究生院.尽管社会工作很多,但他并没有中断学术研究. 多年来,他在编译技术.操作系统.网络及局域分布式系统方面进行了大量的一起来看看 《结构化计算机组成》 这本书的介绍吧!