🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] 结构体也称自定义类型,这里所说的类型也就是结构体。 ## 一个类型实现多个接口 动物作为一个结构体,动物又有跑又有叫的方法。他可以有跑的接口,又有叫的接口 >[info] 同个结构体实现不同的接口相互不影响 ```go // Animal 是动物的结构体 type Animal struct { name string } // Run 是动物跑的方法 func (a Animal) Run() { fmt.Printf("%s在奔跑~\n", a.name) } // Bark 是动物叫的方法 func (a Animal) Bark() { fmt.Printf("%s在叫~\n", a.name) } // Runer 是跑的接口 type Runer interface { Run() } // Barker 是叫的接口 type Barker interface { Bark() } func main() { d := Animal{"旺财"} var r Runer = d var b Barker = d r.Run() b.Bark() } // 运行结果: // 旺财在奔跑~ // 旺财在叫~ ``` ## 多种类型实现同一接口 以前举例都是这种类型,多个类型实现同一个接口。这里就不写示例了~ >[info] ***说明*** > - 类型需要有接口下所有方法。 > - 接口的所有方法,不一定需要由一个类型完全实现,接口的方法可以通过在类型中嵌入其他类型或者结构体来实现。 ```go // WashingMachine 是洗衣机接口 type WashingMachine interface { Wash() Dry() } // Dryer 是烘干机结构体 type Dryer struct{} // Dry 是烘干机的烘干功能 func (d Dryer) Dry() { fmt.Println("烘干功能") } // Haier 是海尔洗衣机结构体 type Haier struct { Dryer // 继承烘干机的方法 } // Wash 是海尔洗衣机的洗涤功能 func (h Haier) Wash() { fmt.Println("洗衣服功能") } func main() { h := Haier{} var w WashingMachine = h w.Dry() w.Wash() } ```