创建包含另一个结构体字段的结构体

use*_*682 2 struct go

如何使用另一个结构体的字段创建一个结构体

struct box {
    x int
    y int
}

struct textbox {
    BOXVALUES
    text string
}
Run Code Online (Sandbox Code Playgroud)

小智 5

Go 没有像 Java 那样的继承概念,在 Java 中你可以说 textbox 是 box 的子元素,因此继承了它的字段。

所以你可以这样做:

type box struct {
  x int
  y int
}

type textbox struct {
  box
  text string
}
Run Code Online (Sandbox Code Playgroud)

通过指定不带结构体字段名称的类型,您可以复制struct intbox中定义的字段。然而,在构建过程中,您仍然必须显式初始化字段:box textboxbox

t := textbox {
  box: box{
    x: 1,
    y: 2,
  },
  text: "aoeu",
}
Run Code Online (Sandbox Code Playgroud)

但是,您不再需要box在内部引用才能textbox访问,例如:

println(t.x)
Run Code Online (Sandbox Code Playgroud)

在这方面,Go 有点奇怪,因为它struct不是一个对象,所以textbox实际上并不继承自box,而是将其复制到其中,并带有一些用于访问的语法糖。