Go的接口类型
文章目录
一、接口类型
1.1 接口的实现类型
对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部特征(即全部的方法),那么它就一定是这个接口的实现类型。
这是一种无侵入的接口实现方式,这种方式还有一个专有名词,叫“Duck typing”,中文常译做鸭子类型。
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
1.2 判定实现了接口类型的某个方法
怎么判定一个数据类型的某一个方法实现的就是某个接口类型中的某个方法呢?
- 两个方法的方法签名要完全一致;
- 两个方法的名称要一模一样;
package main
import "fmt"
type Pet interface {
SetName(name string)
Name() string
Category() string
}
type Dog struct {
name string
}
func (dog *Dog) SetName(name string) {
dog.name = name
}
func (dog Dog) Name() string {
return dog.name
}
func (dog Dog) Category() string {
return "dog"
}
func main() {
// 示例一
dog := Dog{
"little dog"}
_, ok := interface{
}(dog).(Pet)
fmt.Printf("dog 实现了 Pet类型: %v\n", ok