Golang 结构体中的promoted字段

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 。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程