使用“键值对”初始化结构。
结构体可以使用“键值对”(键值对)来初始化其字段。每个“键”(key)对应结构体中的一个字段,而一个键(value)的“值”则对应该字段的值。要初始化的字段。
输入键值对是可选的,初始化列表中不能输入不需要初始化的字段。
结构体实例化后字段的默认值就是该字段类型的默认值。例如,值是 0,字符串是“”(空字符串),布尔值是 false,指针是 nil,等等。
1)键值对初始化结构描述格式
键值对初始化的格式为:
ins := 構造体の型名{
フィールド 1: フィールド 1 の値,
フィールド 2: フィールド 2の値,
…
}
下面是每个部分的描述。
- 结构类型:定义结构时键入名称。
- 字段1、字段2:结构体成员的字段名称。字段名称只能在结构类型名称的字段初始化列表中出现一次。
- 字段1的值、字段2的值:结构体成员字段的初始值。
键值之间用:分隔,键值对之间用,分隔
2)将键值对输入结构体的示例
下面的例子描述了一个家庭中人物之间的关系,就像童谣“爸爸的爸爸是爷爷”中那样。您可以使用多个级别的子级来说明和建立角色之间的关系。填充该结构的代码键值对的格式为:
type People struct {
name string
child *People
}
relation := &People{
name: "MyName",
child: &People{
name: "MyChildName",
child: &People{
name: "MyChildChildName",
},
},
} 代码说明如下:
- 第 1 行定义 People 结构。
- 第 2 行,结构体的字符串字段。
- 第3行,结构体的结构体指针字段,类型为*People。
- 第6行,从People类型获取关系地址后,形成*People类型的实例。
- 第 8 行在子进程初始化时需要 *People 类型的值,并使用该地址来初始化 People。
提示:结构体成员中只能包含结构体指针类型;包含非指针类型将导致编译错误。
使用多个值的列表初始化结构体
Go语言可以根据“键值对”初始化来忽略“键”。也就是说,您可以使用多个值的列表来初始化结构体中的字段。
1)多值列表初始化结构体的描述格式
多个值用逗号初始化。例子:
ins := 構造体型名{
フィールド 1 の値、
フィールド 2 の値、
…
}
以此格式初始化时,请注意以下事项:
- 该结构的所有字段都必须初始化。
- 输入每个初始值的顺序必须与结构中声明字段的顺序匹配。
- 您不能混合键值对和值列表的初始化格式。
2) 使用多个值列表初始化结构体的示例
以下示例显示了地址结构并需要特定的地址顺序。例如:
type Address struct {
Province string
City string
ZipCode int
PhoneNumber string
}
addr := Address{
"Tokyo",
"Tokyo",
123456,
"123456789",
}
fmt.Println(addr) 当您运行代码时,输出将如下所示:
{Tokyo Tokyo 123456 123456789}

匿名结构没有类型名称,可以直接使用,无需使用 type 关键字定义。
1)匿名结构体定义格式及初始化描述方法
初始化匿名结构体由两部分组成:定义结构体和初始化键值对。结构体定义没有结构体类型名称,只有字段和类型定义。键值对的初始化部分由多个可选键组成。 -值对。格式为:
ins := struct {
// 匿名構造体フィールド定義
フィールド 1 フィールド タイプ 1
フィールド 2 フィールド タイプ 2
…
} {
// フィールド値の初期化 初期化
フィールド 1: フィールド 1 の値、
初期化フィールド 2: フィールド 2 の値,
…
}
下面是每个部分的描述。
- Field1、Field2…:由结构体定义的字段名称。
- 初始化字段1、初始化字段2…:结构体初始化时的字段名称;可以选择性地初始化字段。
- 字段类型 1、字段类型 2…:该结构定义字段的类型。
- Field 1 value、Field 2 value…:结构体初始化字段的初始值。
键值对初始化部分是可选的。如果成员未初始化,则匿名结构具有以下格式:
ins := struct {
フィールド 1 フィールド タイプ 1
フィールド 2 フィールド タイプ 2
…
}
2) 使用匿名结构的示例
此示例使用匿名结构来定义和初始化消息结构。该消息结构具有消息标识部分(ID)和数据部分(data)。打印消息内容的 printMsg() 函数必须接收消息结构。为匿名结构参数重新定义匿名结构。这是代码:
package main
import (
"fmt"
)
// 匿名構造体を渡してメッセージの型をプリントする
func printMsgType(msg *struct {
id int
data string
}) {
fmt.Printf("%T\n", msg)
}
func main() {
// 匿名構造体のインスタンス化
msg := &struct { // 定義部分
id int
data string
}{ // 値の初期化部分
1024,
"hello",
}
printMsgType(msg)
} 这是代码输出:
*struct { id int; data string }
代码说明如下:
- 第8行定义了 printMsgType() 函数,参数为 msg ,类型为
*struct{id int data string},并且类型不是由 type 定义的,所以每次使用时都必须定义它。 - 第 14 行使用字符串格式的
%T动词打印 msg 的类型名称。 - 第 20 行实例化一个匿名结构并初始化其成员。
- 第 21 行和第 22 行定义了匿名结构的字段。
- 第24行和第25行为匿名结构的字段分配初始值。
- 第 28 行将 msg 传递给 printMsgType() 函数以进行函数调用。
匿名结构体的类型名是该结构体所包含的字段成员的详细描述,在开发中很少使用,因为使用时必须重新定义,导致大量重复代码。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

