package main
import “fmt”
// 定义接口,包含 Eat 方法
type Duck interface {
Eat()
}
// 定义 Cat 结构体,并实现 Eat 方法
type Cat struct{}
func (c *Cat) Eat() {
fmt.Println(“cat eat”)
}
// 定义 Dog 结构体,并实现 Eat 方法
type Dog struct{}
func (d *Dog) Eat() {
fmt.Println(“dog eat”)
}
func main() {
var c Duck = &Cat{}
c.Eat()
var d Duck = &Dog{}
d.Eat()
s := []Duck{
&Cat{},
&Dog{},
}
for _, n := range s {
n.Eat()
}
}
使用 type
关键词定义接口:
type Duck interface {
Eat()
}
接口包含了一个 Eat()
方法,然后定义两个结构体类型 Cat
和 Dog
,分别实现了 Eat
方法。
// 定义 Cat 结构体,并实现 Eat 方法
type Cat struct{}
func (c *Cat) Eat() {
fmt.Println(“cat eat”)
}
// 定义 Dog 结构体,并实现 Eat 方法
type Dog struct{}
func (d *Dog) Eat() {
fmt.Println(“dog eat”)
}
遍历接口切片,通过接口类型可以直接调用对应方法:
s := []Duck{
&Cat{},