接口
语法
type Traversal interface {
Traverse()
}
duck typing
定义
使用者->实现者
接口由使用者定义
接口的实现:
接口的实现是隐式的
只要实现接口里的方法
接口的值类型
fmt.printf("%T, %v", 接口变量, 接口变量) #打印接口类型和值
// r.(type) r的类型
switch v := r.(type) {
case mock.Retriever:
case *real.Retrieve:
}
// type assertion
r.(*real.Retruever)
或
r, ok := r.(mock.Retruever)
if ok != nil {
fmt.Printf("Err: %s", ok)
}
接口变量里面有什么:
* 接口变量自带指针
* 接口变量同样采用值传递, 几乎不需要使用接口的指针
* 指针接收者实现只能以指针方式使用; 值接收者都可以
接口的组合
// 把Retriever和poster接口组合成一个接口
type RetrieverPoster interface {
Retriever
Poster
}
常用接口
string
reader
writer