在面向对象思想中,实现对象关系需要使用继承特性。例如,人类不能飞行,鸟类可以飞行。人类和鸟类都可以继承自可行走类,但只有鸟类继承自飞行类。 面向对象的设计原则中也建议对象最好不要使用多重继承,有些面向对象语言从语言层面就禁止了多重继承,如C和Java语言。鸟类同时继承自可行走类和飞行类,这显然是存在问题的。在面向对象思想中要正确地实现对象的多重特性,只能使用一些精巧的设计来补救。 Go语言的结构体内嵌特性就是一种组合特性,使用组合特性可以快速构建对象的不同特性。 下面的代码使用Go语言的结构体内嵌实现对象特性组合,请参考下面的代码。 人和鸟的特性: packagemain importfmt 可飞行的 typeFlyingstruct{} func(fFlying)Fly(){ fmt。Println(canfly) } 可行走的 typeWalkablestruct{} func(fWalkable)Walk(){ fmt。Println(cancalk) } 人类 typeHumanstruct{ Walkable人类能行走 } 鸟类 typeBirdstruct{ Walkable鸟类能行走 Flying鸟类能飞行 } funcmain(){ 实例化鸟类 b:new(Bird) fmt。Println(Bird:) b。Fly() b。Walk() 实例化人类 h:new(Human) fmt。Println(Human:) h。Walk() } 代码说明如下: 第6行,声明可飞行结构(Flying)。 第8行,为可飞行结构添加飞行方法Fly()。 第13行,声明可行走结构(Walkable)。 第15行,为可行走结构添加行走方法Walk()。 第20行,声明人类结构。这个结构嵌入可行走结构(Walkable),让人类具备可行走特性 第25行,声明鸟类结构。这个结构嵌入可行走结构(Walkable)和可飞行结构(Flying),让鸟类具备既可行走又可飞行的特性。 第33行,实例化鸟类结构。 第35和36行,调用鸟类可以使用的功能,如飞行和行走。 第39行,实例化人类结构。 第41行,调用人类能使用的功能,如行走。 运行代码,输出如下: Bird: canfly cancalk Human: cancalk 使用Go语言的内嵌结构体实现对象特性,可以自由地在对象中增、删、改各种特性。Go语言会在编译时检查能否使用这些特性。