Golang 结构体中的promoted字段
在Go结构中,promoted字段就像匿名字段一样,字段的类型就是字段的名字。我们在嵌套结构中使用这个概念,一个结构是另一个结构中的字段,只需在另一个结构中加入该结构的名称,它的行为就像嵌套结构中的匿名字段。而该结构的字段(除嵌套结构外)是嵌套结构的一部分,这种类型的字段被称为 Promoted fields。如果匿名结构或嵌套结构和父结构包含一个具有相同名称的字段,那么该字段不会被promoted,只有不同名称的字段才会被promoted到该结构。
语法
type x struct{
// Fields
}
type y struct{
// Fields of y structure
x
}
让我们借助于一个例子来讨论这个概念。
例子
// Go program to illustrate the
// concept of the promoted fields
package main
import "fmt"
// Structure
type details struct {
// Fields of the
// details structure
name string
age int
gender string
}
// Nested structure
type student struct {
branch string
year int
details
}
func main() {
// Initializing the fields of
// the student structure
values := student{
branch: "CSE",
year: 2010,
details: details{
name: "Sumit",
age: 28,
gender: "Male",
},
}
// Promoted fields of the student structure
fmt.Println("Name: ", values.name)
fmt.Println("Age: ", values.age)
fmt.Println("Gender: ", values.gender)
// Normal fields of
// the student structure
fmt.Println("Year: ", values.year)
fmt.Println("Branch : ", values.branch)
}
输出
Name: Sumit
Age: 28
Gender: Male
Year: 2010
Branch : CSE
解释: 在上面的例子中,我们有两个结构,分别是details和student。其中details结构是普通结构,student结构是嵌套结构,它包含details结构中的字段,就像匿名字段一样。现在,details结构中的字段,即姓名、年龄和性别被提升到student结构中,被称为提升字段。现在,你可以在学生结构的帮助下直接访问这些字段,如 values.name , values.age , 和 values.gender 。