面向接口
面向接口
duck typing 大黄鸭是不是个鸭子?
- 描述事物外部行为而非内部结构
 - 从使用者的角度来看
 - go 属于结构化类型系统
 
go lang duck typing
- 同时具有 python、c++ 的 duck typing 的灵活性(什么类型都可以传)
 - 又具有 java 的类型检查
 
接口的定义与实现
使用者 ——> 实现者
- 接口由使用者定义
 接口的实现是隐式
- 1234567891011121314151617181920// (使用者定义接口)type Retriever interface {Get(url string) string}// 使用者func download(r Retriever) string{return r.Get("http://www.imooc.com")}=====// 实现者type Retriever struct {UserAgent stringTimeOut time.Duration}// 实现了接口func (r Retriever) Get(url string) string {return string("result")}
 
接口的值类型
- 接口变量:实现者的类型、实现者的指针(指向实现者)
 - 接口变量自带指针
 - 接口变量同样采用值传递,几乎不需要使用接口的指针
 指针接收者实现只能以指针方式使用,值接收者都可以
查看接口变量
- 表示任何类型:interface{}
 - Type Assertion
 - Type Switch
 
接口的组合
  | 
  | 
接口的值类型
- 接口变量:实现者的类型、实现者的指针(指向实现者)
 - 接口变量自带指针
 - 接口变量同样采用值传递,几乎不需要使用接口的指针
 指针接收者实现只能以指针方式使用,值接收者都可以
查看接口变量
- 表示任何类型:interface{}
 - Type Assertion
 - Type Switch
 
接口的组合
  | 
  | 
常用系统接口
- Stringer
 - Reader
 - Writer