接口

接口

语法

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