Go学习——13.接口(学习中)
程序员文章站
2022-07-15 14:22:48
...
接口
1.duck typing
- 描述事物的外部行为而非内部结构
- 严格来说,go属于结构化类型系统,类似duck typing,我们就当做go语言是duck typing
2. go语言的接口
使用者 ------------------> 实现者
download retriever
实现一个download方法,传入retriever实现者,调用download,让传入的retriever去实现下载,然后返回
从上面的描述可以看出:
- 接口 由 使用者 定义
2.1接口的定义和使用
- 定义
type Retiever interface {
Get(url string) string
}
func download(r Retiever) string{
return r.Get("http://www.baidu.com")
}
- 使用
- 步骤:
- 先声明一个接口
- 给接口赋值,赋值是一个结构体类型数据
- 结构体步骤
- 先声明结构体
- 声明一个方法,该方法包含接口的方法
- 步骤:
// 以下为声明结构体部分
type mockRetiever struct{
Content string
}
func (mr mockRetiever) Get(url string) string {
return mr.Content
}
// 以上为声明结构体部分
// 以下为声明接口和赋值接口部分
var r Retiever // 声明一个接口
r = mockRetiever{"this is a fake url"}
fmt.Println(download(r))
- 总结下 接口 与 结构体 的关系:
结构体如果实现了接口所有的方法,那么就说结构体实现了这个接口
既然结构体实现了这个方法,那么要用这个结构,就可以
1.先声明接口r
2.把结构体类型数据赋值给接口r
3.r就可以调用接口里的方法
- 实例:用于表明接口的用途
计算出各个员工的报酬,每个员工的类型不同,计算方式也不同