在 Go 结构中,提升的字段就像匿名字段一样,字段的类型是字段的名称。我们在嵌套结构中使用这个概念,其中一个结构是另一个结构中的字段,只需将结构的名称添加到另一个结构中,它的行为就像嵌套结构的匿名字段。并且该结构的字段(嵌套结构除外)是嵌套结构的一部分,这种类型的字段称为提升字段。如果匿名结构或嵌套结构和父结构包含具有相同名称的字段,则不会提升该字段,只会将不同名称的字段提升到结构。
句法:
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。其中细节结构是普通结构,学生结构是嵌套结构,它包含细节结构作为其中的字段,就像匿名字段一样。现在,详细信息结构的字段,即姓名、年龄和性别被提升到学生结构并称为提升字段。现在,您可以直接与学生结构类似values.name,values.age和values.gender的帮助下访问它们。