旺仔小糖

golang struct 初始化 2 years ago

go
2254个字符
共有94人围观

1. 列表初始化

Go 语言 中 结构体 变量的初始化的方式有两种,分别为:

  • 使用列表对字段挨个赋值
  • 使用键值对赋值 的方式。

如果我们使用列表对字段挨个赋值的方式初始化结构体,那么结构体的每个字段都必须要要赋值,否则程序报错。并且使用列表初始化的方式定义结构体时,最后一个字段也需要加逗号结尾符。

//语法
varName := StructName{
    Field1Value,
    Field2Value,
    Field3Value,
    ...
}

说明:我们只需要定义一个该结构体类型的 变量 名,接着在大括号里面对结构体的每个字段挨个设置值。这里的每个字段都必须设置值,如果不设置,则程序报错。

举例:

package main

import (
	"fmt"
)

func main() {
	//使用列表初始化的形式定义结构体变量
	type Student struct {
		Name  string
		Age   int
		Score float64
	}
	var stu = Student{
		"scott",
		1998,
		100.0,
	}
	fmt.Println("Student =", stu)
}

运行:

说明:我们定义了一个结构体 Student,该结构体初始化有三个字段,一个是 string 类型的 Name,一个是 int 类型的 Age,还有一个 float64 类型的 Score。

接着我们使用列表初始化的形式定义结构体变量,并为结构体变量的每个字段赋值。

使用列表初始化的形式定义结构体变量,必须每个字段都赋值

举例:

package main

import (
	"fmt"
)

func main() {
	//使用列表初始化的形式定义结构体变量,必须每个字段都赋值
	type Student struct {
		Name  string
		Age   int
		Score float64
	}
	var stu = Student{
		"scott",
		1998,
	}
	fmt.Println("Student =", stu)
}

运行:

说明:我们定义了一个结构体 Student,该结构体初始化有三个字段,但我们初始化赋值的时候,只给了两个字段赋值,因此我们的程序报错。

2. 键值对初始化

举例:

package main

import (
	"fmt"
)

func main() {
	//使用键值对的形式初始化结构体变量
	type Student struct {
		Name  string
		Age   int
		Score float64
	}
	var stu = Student{
		Name:  "SCOTT",
		Age:   1998,
		Score: 100.0,
	}
	fmt.Println("Student =", stu)
}

运行:

说明:我们使用键值对的形式初始化结构体时,结构体里面的键值对的顺序不需要跟结构体里面的顺序一致。我们定义结构体的顺序为 Name、Age 和 Score,但我们赋值的顺序为 Age,Name 和 Score。

使用键值对的形式初始化结构体变量,可以省略不必要的值的赋值

package main

import (
	"fmt"
)

func main() {
	//使用键值对的形式初始化结构体变量,可以省略不必要的值的赋值
	type Student struct {
		Name  string
		Age   int
		Score float64
	}
	var stu = Student{
		Name: "scott",
	}
	fmt.Println("Student =", stu)
}

我们定义了一个结构体 Student,该结构体初始化有三个字段,一个是 Name,一个是 Age,还有一个 Score,接着,我们显式使用字段名的方式给结构体的字段赋值,但我们只给字段 Name 赋值。

这时,程序没有报错,没有被赋值的字段名使用该字段名变量类型的默认值进行初始化。

3. 总结

1, 我们使用列表对字段挨个赋值的方式初始化结构体,那么结构体的每个字段都必须要要赋值,否则程序报错。并且使用列表初始化的方式定义结构体时,最后一个字段也需要加逗号结尾符。列表初始化结构体语法:

varName := StructName{
    Field1Value,
    Field2Value,
    Field3Value,
    ...
}

2, 如果使用键值对赋值的方式初始化结构体,没有被赋值的字段将使用该字段 类型 的默认值,如果使用键值对赋值的方式初始化结构体,那么我们可以有选择的指定赋值的字段。键值对初始化结构体语法:

varName := StructName{
    Field1:Field1Value,
    Field2:Field2Value,
    ...
}