如何使用另一个结构体的字段创建一个结构体
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,而是将其复制到其中,并带有一些用于访问的语法糖。