Golang 如何使用结构体字面量创建结构体实例

Golang 如何使用结构体字面量创建结构体实例

Golang中的结构体或 struct 是用户定义的数据类型,它由各种数据字段组成。每个数据字段都有自己的数据类型,可以是内置类型或另一个用户定义的类型。结构体代表具有某些属性/字段的任何现实世界实体。
例如,学生有一个名称,学号,城市,部门。将这四个属性组合到一个单一的结构体地址中是有意义的,如下所示。

type Student struct {
      name string 
      roll_no int
      city string
      department string
}

声明结构体的语法:

var x Student

以上代码创建了一个类型为Student的变量,其中字段默认设置为它们各自的 零值

由于结构体是复合数据类型,因此使用复合文字进行初始化。复合文字构造结构体,数组,切片和映射的值,其中对于这些类型使用单个语法。在Golang中使用结构体文字创建结构体实例。您可以使用结构体字面量创建结构体实例,如下所示:

var d = Student{"Akshay", 1, "Lucknow", "计算机科学"}

我们还可以使用短声明运算符。

d := Student{"Akshay", 1, "Lucknow", "计算机科学"} 

在创建结构体文字时必须记住以下规则:

  1. 键必须是在结构类型中声明的字段名。
  2. 不包含任何键的元素列表必须按字段声明顺序列出每个结构字段的元素。
  3. 包含键的元素列表不需要为每个结构字段都有一个元素。省略的字段获得该字段的零值。
  4. 文字可能省略元素列表;这种文字计算其类型的零值。
  5. 指定不同包中的结构体的非导出字段的元素是错误的。

示例1:

// Golang程序展示了如何
//使用结构体字面量声明和定义结构体
package main
 
// 导入所需模块
import "fmt"
 
// 定义结构体类型
type Student struct {
    name       string
    roll_no    int
    city       string
    department string
}
 
func main() {
 
    // 声明结构体类型的变量
    // 所有结构体字段都会被初始化
    // 为它们各自的零值
    var x Student
    fmt.Println("学生0:", x)
 
    // 使用结构体字面量声明和初始化结构体
    // 字段应按与它们在结构体定义中声明的顺序进行初始化
    x1 := Student{"Akshay", 1, "Lucknow", "计算机科学"}
     
    fmt.Println("学生1: ", x1)
 
    // 您可以为其各自的值指定键
    x2 := Student{name: "Anita", roll_no: 2,
     city: "Ballia", department: "机械"}
     
    fmt.Println("学生2: ", x2)
} 

输出:

学生0:{ 0  }
学生1: {Akshay 1 Lucknow 计算机科学}
学生2: {Anita 2 Ballia 机械}

未初始化的字段设置为相应的零值。
示例2:

// Golang程序演示
// 字符串字面量的使用
package main

// 导入所需模块
import "fmt"

// 定义结构类型
type Address struct {
    name, city string
    Pincode    int
}

func main() {
    add1 := Address{name: "Ram"}
    fmt.Println("Address is:", add1)
} 

输出:

Address is: {Ram  0}

注意,当使用初始化语法field:value进行实例化时,未初始化的值会被设置为零值。以下代码将输出错误。
示例:

// Golang程序演示
// 字符串字面量的使用
package main

// 导入所需模块
import "fmt"

// 定义结构类型
type Address struct {
    name, city string
    Pincode    int
}

func main() {
    add1 := Address{"Ram"}
    fmt.Println("Address is: ", add1)
} 

输出:

编译错误:Address文本中的值太少

如果为元素指定至少一个关键字,则还必须指定所有其他关键字。
示例:

package main

// 导入所需模块
import "fmt"

// 定义结构类型
type Address struct {
    name, city string
    Pincode    int
}

func main() {
    // 只在此处指定了1个关键字
    add1 := Address{name: "Ram", city: "Mumbai", Pincode: 221007}
    fmt.Println("Address is: ", add1)
} 

输出:

编译错误:字段:值和值初始化程序的混合

上面的程序会报错,因为我们只为一个元素指定了关键字,这将创建一个field:value和value initializers的混合。我们应该选择field:value或value initializers中的一种。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程