企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
Go 不支持继承,但它支持组合(Composition);通过在结构体内嵌套结构体,可以实现组合 ## 嵌套结构体(Nested Structs) 结构体的字段有可能也是一个结构体。这样的结构体称为嵌套结构体 ~~~go type Address struct { city, state string } type Person struct { name string age int address Address } func main() { var p Person p.name = "Naveen" p.age = 50 p.address = Address { city: "Chicago", state: "Illinois", } fmt.Println("Name:", p.name) fmt.Println("Age:",p.age) fmt.Println("City:",p.address.city) fmt.Println("State:",p.address.state) } ~~~ ### 提升字段(Promoted Fields) 如果是结构体中有匿名的结构体类型字段,则该匿名结构体里的字段就称为提升字段。这是因为提升字段就像是属于外部结构体一样,可以用外部结构体直接访问 ### 嵌套结构体的字段名冲突 嵌套结构体内部可能存在相同的字段名。这个时候为了避免歧义需要指定具体的内嵌结构体的字段。 ~~~ //Address 地址结构体 type Address struct { Province string City string CreateTime string } //Email 邮箱结构体 type Email struct { Account string CreateTime string } //User 用户结构体 type User struct { Name string Gender string Address Email } func main() { var user3 User user3.Name = "pprof" user3.Gender = "女" // user3.CreateTime = "2019" //ambiguous selector user3.CreateTime user3.Address.CreateTime = "2000" //指定Address结构体中的CreateTime user3.Email.CreateTime = "2000" //指定Email结构体中的CreateTime } ~~~