欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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")
}
  • 使用
    • 步骤:
      1. 先声明一个接口
      2. 给接口赋值,赋值是一个结构体类型数据
      • 结构体步骤
        1. 先声明结构体
        2. 声明一个方法,该方法包含接口的方法
// 以下为声明结构体部分
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就可以调用接口里的方法

  • 实例:用于表明接口的用途

计算出各个员工的报酬,每个员工的类型不同,计算方式也不同