6.6 初始化内嵌结构体 - Go语言中文社区

6.6 初始化内嵌结构体


结构体内嵌初始化时,将结构体内嵌的类型作为字段名像普通结构体一样进行初始化,详细实现过程请参考下面的代码。

车辆结构的组装和初始化:

  1. package main
  2. import "fmt"
  3. // 车轮
  4. type Wheel struct {
  5. Size int
  6. }
  7. // 引擎
  8. type Engine struct {
  9. Power int // 功率
  10. Type string // 类型
  11. }
  12. // 车
  13. type Car struct {
  14. Wheel
  15. Engine
  16. }
  17. func main() {
  18. c := Car{
  19. // 初始化轮子
  20. Wheel: Wheel{
  21. Size: 18,
  22. },
  23. // 初始化引擎
  24. Engine: Engine{
  25. Type: "1.4T",
  26. Power: 143,
  27. },
  28. }
  29. fmt.Printf("%+v\n", c)
  30. }

代码说明如下:

  • 第 6 行定义车轮结构。
  • 第 11 行定义引擎结构。
  • 第 17 行定义车结构,由车轮和引擎结构体嵌入。
  • 第 27 行,将 Car 的 Wheel 字段使用 Wheel 结构体进行初始化。
  • 第 32 行,将 Car 的 Engine 字段使用 Engine 结构体进行初始化。

初始化内嵌匿名结构体

在前面描述车辆和引擎的例子中,有时考虑编写代码的便利性,会将结构体直接定义在嵌入的结构体中。也就是说,结构体的定义不会被外部引用到。在初始化这个被嵌入的结构体时,就需要再次声明结构才能赋予数据。具体请参考下面的代码。

  1. package main
  2. import "fmt"
  3. // 车轮
  4. type Wheel struct {
  5. Size int
  6. }
  7. // 车
  8. type Car struct {
  9. Wheel
  10. // 引擎
  11. Engine struct {
  12. Power int // 功率
  13. Type string // 类型
  14. }
  15. }
  16. func main() {
  17. c := Car{
  18. // 初始化轮子
  19. Wheel: Wheel{
  20. Size: 18,
  21. },
  22. // 初始化引擎
  23. Engine: struct {
  24. Power int
  25. Type string
  26. }{
  27. Type: "1.4T",
  28. Power: 143,
  29. },
  30. }
  31. fmt.Printf("%+v\n", c)
  32. }

代码说明如下:

  • 第 14 行中原来的 Engine 结构体被直接定义在 Car 的结构体中。这种嵌入的写法就是将原来的结构体类型转换为 struct{…}。
  • 第 30 行,需要对 Car 的 Engine 字段进行初始化,由于 Engine 字段的类型并没有被单独定义,因此在初始化其字段时需要先填写 struct{…} 声明其类型。
  • 第 3行开始填充这个匿名结构体的数据,按“键:值”格式填充。
版权声明:本教程内容除了本站原创内容外,还有来源自C语言编程网,博客园,CSDN等技术站点,感谢相关博主原创文章,转载请附上原文出处链接和本声明。
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 阅读 ( 612 )
  • 分类:Go

0 条评论

官方社群

GO教程

猜你喜欢