文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go 结构体

2023-08-30 14:47

关注

现在有一个需求,要求存储学生的详细信息,例如,学生的学号,学生的姓名,年龄,家庭住址等。按照以前学习的存储方式,可以以如下的方式进行存储:

在这里插入图片描述
通过定义变量的信息,进行存储。但是这种方式,比较麻烦,并且不利于数据的管理。

在GO语言中,我们可以通过结构体来存储以上类型的数据,结构体的定义如下:

在这里插入图片描述
type后面跟着的是结构体的名字Student, struct表示定义的是一个结构体。
大括号中是结构体的成员,注意在定义结构体成员时,不要加var。通过以上的定义,大家能够感觉出,通过结构体来定义复杂的数据结构,非常清晰。

结构体定义完成后,可以进行初始化。

一、结构体初始

在这里插入图片描述
注意:顺序初始化,每个成员必须初始化,在初始化时,值的顺序与结构体成员的顺序保持一致。
在这里插入图片描述
结构体定义完成后,结构体成员的使用。
在这里插入图片描述

二、结构体比较与赋值

两个结构体可以使用 == 或 != 运算符进行比较,但不支持 > 或 <。
在这里插入图片描述
同类型的两个结构体变量可以相互赋值。
在这里插入图片描述

三、结构体数组

需求:用结构体存储多个学生的信息。
结构体数组定义如下所示:
在这里插入图片描述
上面的代码首先是定义了一个Student的结构体,然后在main方法里面用一个变量Students接收了这个新建的[]Student结构体数组,结构体是放一个Student那么,结构体数组就可想而知了,是放多个结构体,然后循环遍历Students的下标也就是有几个结构体就会遍历几次,最后再打印里面的sutdents里面的name,最后输出的结果"张三",“李四”,“王五”。

四、结构体作为函数参数

结构体也可以作为函数参数,进行传递,如下所示:
在这里插入图片描述
把结构体作为参数的话,参数类型就只能放相对应的结构体,不然会报错。
上面代码首先在Test里面修改一下student里面的id为666,然后在main里面新建一个为s的结构体,这个结构体和student一样,所以Test里面能放,放进去之后就会修改这个id,最后打印的结果为:id:666,name:mike,sex:m,age:18,addr:bj。

结构体作为函数参数进行传递,是值传递。

五、结构体和map

切片

type hero struct {name  stringage   intpower int}func main() {// 切片类型m := make(map[int][]hero)m[101] = []hero{{"李白", 30, 100}}m[101] = append(m[101], hero{"荆轲", 30, 10})fmt.Println(m)delete(m, 101)fmt.Println(m)m[102] = []hero{{"吕布", 30, 100}}m[102] = append(m[102], hero{"马超", 30, 100})fmt.Println(m)}

输出结果

map[101:[{李白 30 100} {荆轲 30 10}]]map[]     map[102:[{吕布 30 100} {马超 30 100}]]

map 当作参数传递是引用传递

type hero struct {name  stringage   intpower int}func par(m map[int]hero) {stu := m[102]stu.power = 89m[102] = stufmt.Println(m)}func main() {// 切片类型m := make(map[int]hero)m[101] = hero{"李白", 30, 100}m[102] = hero{"荆轲", 30, 10}fmt.Println(m)par(m)fmt.Println(m)}

主函数和调用的函数值都发生了修改

map[101:{李白 30 100} 102:{荆轲 30 10}]map[101:{李白 30 100} 102:{荆轲 30 89}]map[101:{李白 30 100} 102:{荆轲 30 89}]

结构体作为函数参数

type hero struct {name  stringage   intpower int}// 结构体作为函数的参数func par(m hero) {m.power = 120fmt.Println(m)}func main() {// 结构体变量h := hero{"李白", 30, 100}par(h)fmt.Println(h)}

输出结果

{李白 30 120}{李白 30 100}

结构体作为参数进行传递是值传递

来源地址:https://blog.csdn.net/weixin_47906106/article/details/132565132

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯