Go从入门到精通——结构体(struct)——初始化结构体的成员变量
初始化结构体的成员变量
结构体在实例化时可以直接对成员变量进行初始化。
初始化有两种形态:
1、字段 "键值对" 形式及多个值的列表形式。(键值对形式的初始化适合选择性填充字段较多的结构体)
2、多个值的列表形式适合填充字段较少的结构体。
一、使用“键值对”初始化结构体
结构体可以使用“键值对”(key value pair)初始化字段,每个 "键"(key)对应结构体中的一个字段。键的“值”(value)对应字段需要初始化的值。
键值对的填充是可选的,不需要初始化的字段可以不填入初始化列表中。
结构体实例化后字段的默认值是字段类型的默认值,也就是零值。例如:数值为0,字符串Wie空字符串,布尔为 false,指正为 nil 等。
1、键值对初始化结构体的书写格式
键值对初始化的格式如下:
1 2 3 4 5 | ins := 结构体类型名{ 字段1: 字段1的值, 字段2: 字段2的值, ... } |
2、使用键值对填充结构体的例子
下面例子中描述了家里的人物关联。正如儿歌里唱的:“爸爸的爸爸是爷爷”,人物之间可以使用多级的 child 来描述和建立关联。使用键值对形式填充结构体的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package main type People struct { name string child *People } relation := &Peolple{ name: "爷爷" , child: &People{ name: "爸爸" , child: &Peole{ name: "我" , }, }, } |
二、使用多个值的列表初始化结构体
Go 语言可以在 "键值对" 初始化的基础上忽略 "键"。也就是,可以使用多个值的列表初始化结构体的字段。
1、多个值列表初始化结构体的书写格式
多个值使用逗号分隔初始化结构体,例如:
1 2 3 4 5 | ins := 结构体类型名{ 字段 1 的值, 字段 2 的值, ... } |
使用这种格式是初始化时,需要注意:
- 必须初始化结构体的所有字段。
- 每一个初始值的填充顺序必须与字段在结构体中声明顺序一致。
- 键值对与值列表的初始化形式不能混用。
2、多个值列表初始化结构体的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package main type Address struct { Province string City string ZipCode int PhoneNumber string } add := Address{ "四川" , "成都" , 610000, "0" , } |
三、初始化匿名结构体
匿名结构体没有类型名称,无须通过 type 关键字就可以直接使用。
1、匿名结构体定义格式和初始化写法
匿名结构体的初始化写法由结构体定义和键值对初始化两部分组成。结构体定义时没有结构体类型名,只有字段和类型定义。键值对初始化部分由可选的多个键值对组成,如下格式所示:
1 2 3 4 5 6 7 8 9 10 11 | ins := struct { //匿名结构体字段定义 字段 1 字段类型1 字段2 字段类型2 ... }{ //字段值初始化 初始化字段 1: 字段 1 的值, 初始化字段 2: 字段 2 的值, ... } |
- 字段1、字段2……:及饿哦固体定义的字段名。
- 初始化字段1、初始化字段2……: 结构体初始化时的字段名,可选择性地对字段初始化。
- 字段类型1、字段类型2……: 结构体定义字段的类型。
- 字段1的值,字段2的值……:结构体初始化字段的初始值。
键值对初始化部分是可选的,不初始化成员时,匿名结构体的格式变为:
1 2 3 4 5 | ins := struct { 字段 1 字段类型 1 字段 2 字段类型 2 ... }{} |
2、使用匿名结构体的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package main import "fmt" //定义 printMsgType()函数,参数为 msg,类型为 *struct{id int data string}。//因为没有使用type定义,所以需要在用到的地方每次进行定义。 func printMsgType(msg * struct { id int data string }){ //使用动词 %T 打印 msg 的类型 fmt.Printf( "%T\n" , msg) } func main(){ //实例化一个匿名结构体。对匿名结构体进行实例化,同时初始化成员 msg := & struct { id int data string }{ 1024, "hello" } printMsgType(msg) } |
匿名结构体在使用时需要重新定义,造成大量的重复的代码,因此开发中较少使用。
分类:
Go专题精讲
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期