Go 结构体

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

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

在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}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/111135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字电路-二进制学习

什么是二进制&#xff1f; 数字电路 中 只有 高电平 和低电平 就是 1 和0 进位规则是“逢二进一”&#xff0c;借位规则是“借一当二”。 二进制、八进制 、十进制、十六进制 二进制 有两个数来表示 &#xff1a; 0、1 八进制 有8个数来表示 &#xff1a; 0、1、2、3、4、…

基于RabbitMQ的模拟消息队列之二---创建项目及核心类

一、创建项目 创建一个SpringBoot项目&#xff0c;环境&#xff1a;JDK8&#xff0c;添加依赖&#xff1a;Spring Web、MyBatis FrameWork(最主要&#xff09; 二、创建核心类 1.项目分层 2.核心类 在mqserver包中添加一个包&#xff0c;名字为core&#xff0c;表示核心类…

uniapp 项目实践总结(一)uniapp 框架知识总结

导语&#xff1a;最近开发了一个基于 uniapp 框架的项目&#xff0c;有一些感触和体会&#xff0c;所以想记录以下一些技术和经验&#xff0c;在这里做一个系列总结&#xff0c;算是对自己做一个交代吧。 目录 简介全局文件全局组件常用 API条件编译插件开发 简介 uniapp 是…

openGauss学习笔记-47 openGauss 高级数据管理-权限

文章目录 openGauss学习笔记-47 openGauss 高级数据管理-权限47.1 语法格式47.2 参数说明47.3 示例 openGauss学习笔记-47 openGauss 高级数据管理-权限 数据库对象创建后&#xff0c;进行对象创建的用户就是该对象的所有者。数据库安装后的默认情况下&#xff0c;未开启三权分…

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回&#xff1a;《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…

Gorilla LLM:连接海量 API 的大型语言模型

如果你对这篇文章感兴趣&#xff0c;而且你想要了解更多关于AI领域的实战技巧&#xff0c;可以关注「技术狂潮AI」公众号。在这里&#xff0c;你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 在当今这个数字化时代&#xff0c;大型语言模型&#xff08;LLM…

利用多种机器学习方法对爬取到的谷歌趋势某个关键词的每日搜索次数进行学习

大家好&#xff0c;我是带我去滑雪&#xff01; 前一期利用python爬取了谷歌趋势某个关键词的每日搜索次数&#xff0c;本期利用爬取的数据进行多种机器学习方法进行学习&#xff0c;其中方法包括&#xff1a;随机森林、XGBOOST、决策树、支持向量机、神经网络、K邻近等方法&am…

聚类分析 | MATLAB实现基于DBSCAD密度聚类算法可视化

聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化 目录 聚类分析 | MATLAB实现基于LP拉普拉斯映射的聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于DBSCAD密度聚类算法可视化&#xff0c;MATLAB程序。 使用带有KD树加速的dbscan_with_kdtree函数进行…

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管

目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖&#xff0c;第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易&#xff0c;还希望各位大佬支持一下&#xff01; &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&…

vscode编译C语言

首先把c文件拖到vscode中 然后安装这个插件 安装完毕后会提示你代码中的语法错误&#xff0c;并在编译器的右上角出现编译按钮 我当前的问题是没有GCC&#xff0c;我们点一下编译的按钮也可以看出来这个问题 在 django笔记中 附录二 windows上直接安装uwsgi(不可行) 附录二 win…

【Go 基础篇】切片:Go语言中的灵活数据结构

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;是一种强大且灵活的数据结构&#xff0c;用于管理和操作一系列元素。与数组相比&#xff0c;切片的大小可以动态调整&#xff0c;这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入&#xff0c;介…

243:vue+Openlayers 更改鼠标滚轮缩放地图大小,每次缩放小一点

第243个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中设置鼠标滚轮缩放地图大小,每次滑动一格滚轮,设定的值非默认值1。具体的设置方法,参考源代码。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源…

科技政策 | 四川省科学技术厅关于发布2024年第一批省级科技计划项目申报指南的通知

原创 | 文 BFT机器人 近日&#xff0c;四川省科学技术厅发布了2024年第一批省级科技计划项目申报指南&#xff1b;其中包括自然科学基金项目、重点研发计划、科技成果转移转化引导计划、科技创新基地&#xff08;平台&#xff09;和人才计划。 01 自然科学基金项目 实施周期 …

全景图像生成算法

摘要 全景图像生成是计算机视觉领域的一个重要研究方向。本文对五种经典的全景图像生成算法进行综述&#xff0c;包括基于相机运动估计的算法、基于特征匹配的算法、基于图像切割的算法、基于多项式拟合的算法和基于深度学习的算法。通过对这些算法的原理、优缺点、适用场景等…

68、使用aws官方的demo和配置aws服务,进行视频流上传播放

基本思想:参考官方视频,进行了配置aws,测试了视频推流,rtsp和mp4格式的视频貌似有问题,待调研和解决 第一步:1) 进入aws的网站,然后进入ioT Core 2)先配置 Thing types & Thing,选择香港的节点,然后AWS ioT--->Manage---> Thing type 然后输入名字,创建Th…

C语言_分支和循环语句(2)

文章目录 前言一、for 循环1.1语法1.2 for 语句的循环控制变量1.3 一些 for 循环的变种 二、do ... while()循环2.1 do 语句的语法2.2 do ... while 循环中的 break 和 continue2.3 练习1 **- 计算n的阶乘**2. - **在一个有序数组中查找具体的某个数字 n** 二分查找算法&#x…

基于社交网络算法优化的BP神经网络(预测应用) - 附代码

基于社交网络算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于社交网络算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.社交网络优化BP神经网络2.1 BP神经网络参数设置2.2 社交网络算法应用 4.测试结果&#xff1a;5…

Java【手撕双指针】LeetCode 18. “四数之和“, 图文详解思路分析 + 代码

文章目录 前言一、四数之和1, 题目2, 思路分析3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 &#x1f4d7; Java数据结构: 顺序表, 链表, 堆…

Docker--harbor私有仓库部署与管理

目录 1、搭建本地私有仓库 #首先下载 registry 镜像 #在 daemon.json 文件中添加私有镜像仓库地址 #运行 registry 容器 #为镜像打标签 #上传到私有仓库 #列出私有仓库的所有镜像 ​ #列出私有仓库的 centos 镜像有哪些tag ​ #先删除原有的 centos 的镜像&#xff0c;再测试…

什么是响应式图片?如何在网页中实现响应式图片?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式图片&#xff08;Responsive Images&#xff09;⭐ 实现响应式图片的方法1. 使用<img>标签的srcset属性2. 使用<picture>元素3. 使用CSS的max-width属性4. 使用响应式图片库 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&…