接口是一个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,
就表示它"实现"了该接口无须在该类型上显式添加接口声明。
所谓对应方法,是指有相同名称、参数列表 (不包括参数名) 以及返回值。当然,该类型还
可以有其他方法。
- 接口命名习惯以er结尾结构体。
- 接口只有方法签名,没有实现。
- 接口没有数据字段。
- 可在接口中嵌入其他接口。
- 类型可实现多个接口。
下面举个栗子:
用例:一个人,他的有两种角色,在公司是程序猿,在家里是孩他爸。在公司当程序猿时就写bug,
在家当爹时就洗尿布。则其接口和结构体的映射关系为:
package main
import "fmt"
type CodeMonkey interface {
codingEveryday() string
}
type Parent interface {
washingDiaper() string
}
type Person struct {
id int
name string
}
func (self *Person) codingEveryday() string {
return fmt.Sprintf("user %d, %s write bug every day.", self.id, self.name)
}
func (self *Person) washingDiaper() string {
return fmt.Sprintf("user %d, %s take care of his baby.", self.id, self.name)
}
func main() {
var monkey CodeMonkey = &Person{1, "Tom"}
fmt.Println(monkey.codingEveryday())
var father Parent = &Person{2, "John"}
fmt.Println(father.washingDiaper())
}