匿名字段和内嵌结构体

结构体可以包含一个或多个匿名 (或者称为内嵌) 字段,即这些字段没有显式的名字。仅指明字段的类型,此时该类型就是字段的名字。匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌的结构体。

匿名字段

匿名字段和面向对象编程中的继承概念相似,可以被用来模拟类似继承的行为。Golang 中的基础就是通过内嵌或组合来实现的,所以说在 Golang 中组合比继承更受欢迎。比如下面的例子:

  1. type test struct {
  2. name string
  3. age int
  4. int // 匿名字段
  5. }

内嵌结构体

结构体也是一种数据类型,所以它同样可以作为匿名字段使用:

  1. type Person struct {
  2. Name string
  3. Age int
  4. Email string
  5. }
  6. type Student struct {
  7. Person
  8. StudentID int
  9. }

下面的代码可以声明并初始化 Student 类型的变量:

  1. st := Student {
  2. Person: Person{"jack", 22, "jack@xxx.com"},
  3. StudentID: 1000,
  4. }

从这个示例可以看出,内层结构体被简单地插入或者内嵌进外层结构体。这种简单的 “继承” 机制使得 Golang 很轻松就能实现从一个或一些类型中继承部分或全部的实现。