📜  Golang 结构中的提升字段

📅  最后修改于: 2021-10-25 02:37:03             🧑  作者: Mango

在 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.agevalues.gender的帮助下访问它们。