当前位置: 首页 > news >正文

34-Golang中的结构体!!!

Golang中的结构体

    • 结构体和结构体变量(实例)的区别和联系
    • 结构体变量(实例)在内存中的布局
    • 如何声明结构体
    • 字段/属性注意事项和细节说明
    • 创建结构体实例的四种方式
    • 结构体使用细节

结构体和结构体变量(实例)的区别和联系

  • 1.结构体是自定义的数据类型,代表一类事物
  • 2.结构体变量(实例)是具体的,实际的,代表一个具体变量

结构体变量(实例)在内存中的布局

在这里插入图片描述

如何声明结构体

type 结构体名称 struct{

​ field1 type

​ field2 type

}

字段/属性注意事项和细节说明

  • 1.字段声明语法同变量
  • 2.字段的类型可以为:基本类型,数组或引用类型
  • 3.在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值),指针、slice和map的零值都是nil,即还没有分配空间
  • 4.不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个
package main
import ("fmt"
)//不影响另外一个,结构体是值类型
type Monster struct {Name stringAge int
}
func main() {var monster1 Monstermonster1.Name = "牛魔王"monster1.Age = 500monster2 := monster1  //结构体是值类型,默认为值拷贝monster2.Name = "青牛精"fmt.Println("monster1=", monster1)fmt.Println("monster2=", monster2)
}//monster1= {牛魔王 500}
//monster2= {青牛精 500}

在这里插入图片描述

创建结构体实例的四种方式

1.方式一—直接声明:var person Person

2.方式二—{}:var person Person = Person{}

3.方式三—&:var perosn *Person = new(Person)

4.方式四—{}:var person *Person = &Person{}

package main
import ("fmt"
)//不影响另外一个,结构体是值类型
type Person struct {Name stringAge int
}
func main() {//方式2p2 := Person{}p2.Name = "tom"p2.Age = 19fmt.Println(p2)//方式3var p3 *Person = new(Person)//底层会对p3.Name = "smith"进行处理//会给p3加上取值运算 (*p).Name = "Smith"(*p3).Name = "smith"p3.Name = "john"p3.Age = 20fmt.Println(*p3)//方法四var person *Person = &Person{}//底层会对person.Name = "scott"进行处理,会加上(*person)//(*person).Name = "scott"person.Name = "ddd"(*person).Age = 44fmt.Println(*person)}/*
{tom 19}
{john 20}
{ddd 44}
*/说明:- 1.第三种和第四种方式返回的是结构体指针
- 2.结构体指针访问字段的标准方式应该是:( *结构体指针).字段名,比如( *person).Name = "tom"
- 3.但是go做了一个简化,也支持结构体指针.字段名,比如person.Name = "tom"go编译器底层对person.Name做了转化(*Person).Name## 结构体内存分配机制变量总是在内存中的,那么结构体变量在内存中就近是怎样存在的?

在这里插入图片描述

结构体使用细节

1.结构体的所有字段在内存中时连续的

在这里插入图片描述
2.结构体是用户单独定义的类型,和其他类型转换时需要有完全相同的字段(名字,个数和类型)

package main
import ("fmt"
)type A struct {Num int
}
type B struct {Num int
}
func main(){var a Avar b Ba = A(b)  //可以转换,但是结构体的字段要完全一样(名字,个数,类型)fmt.Println(a,b)
}//{0} {0}

3.结构体进行type重新定义(相当于取别名),Golang认为是新的数据类型,但是相互间可以强转
在这里插入图片描述

4.struct的每个字段上,可以写上一个tag,该tag可以通过反射机制获取,常见的使用场景就是序列化和反序列化

在这里插入图片描述
序列化使用场景:

在这里插入图片描述

package main
import ("fmt""encoding/json"
)type Monster struct{Name string `json:"name"` //`json:"name"`就是struct tagAge int `json:"age"`Skill string `json:"string"`
}func main(){//创建一个MOnster变量monster := Monster{"kunkun", 27, "sing~"}//将monster变量序列化为json格式字符串jsonStr , err := json.Marshal(monster)if err != nil {fmt.Println("json c=处理错误", err)}fmt.Println("jsonStr", string(jsonStr))
}//jsonStr {"name":"kunkun","age":27,"string":"sing~"}

相关文章:

34-Golang中的结构体!!!

Golang中的结构体结构体和结构体变量(实例)的区别和联系结构体变量(实例)在内存中的布局如何声明结构体字段/属性注意事项和细节说明创建结构体实例的四种方式结构体使用细节结构体和结构体变量(实例)的区别和联系 1.结构体是自定义的数据类型,代表一类事物2.结构体…...

这6个视频剪辑素材库,你一定要知道~

推荐5个免费商用视频素材网站,建议收藏哦! 1、菜鸟图库 视频素材下载_mp4视频大全 - 菜鸟图库 网站素材量很大,有设计、图片、音频、视频等超多素材,大部分都能免费下载。视频素材都很高清,有自然、人物、科技、农业…...

RocketMQ WIN11 搭建

去官方下载 https://rocketmq.apache.org/zh/download/ 下载,博主下载的是 4.6.0 的版本,选择Binary版本 拓展 Source 下载:需要编译 Binary 下载:不需要编译 解压缩,运行 先解压缩环境变量中添加rocketMQ文件夹路…...

iPhone更换电池和屏幕后提醒非原厂配件的操作办法

---开局一张图,内容全靠编系列! 【图】 自从在iPhone系统iOS13开始支持原厂配件检测后,可以说苹果也动起了维修站商家利益的这块蛋糕。道理自然简单,卷嘛!全球汽车行业也不是靠卖新车才赚钱的,各种交通事故…...

chatGPT发布记录

发行说明(2 月 13 日)我们对 ChatGPT 进行了多项更新!这是新功能:我们更新了免费计划中 ChatGPT 模型的性能,以便为更多用户提供服务。根据用户反馈,我们现在默认让 Plus 用户使用更快的 ChatGPT 版本&…...

DataX及DataX-Web

大数据Hadoop之——数据同步工具DataX数据采集工具-DataX datax详细介绍及使用 一、概述 DataX 是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、…...

数据结构与算法系列之kmp算法

什么是kmp算法 1.kmp算法是一种改进的字符串算法,其核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数已达到快速匹配的目的。 它主要实现作用的是 在 (主串)中找到 (匹配)字符串。 例 BF算法与k…...

算法分析详解

自古老的公元前1世纪开始,《周髀算经》就作为中国最古老的天文学和数学著作。 《周髀算经》采用最简便可行的方法确定天文历法,揭示日月星辰的运行规律,包括四季更替,气候变化,南北有极,昼夜相推的道理。为…...

东南大学自然辩证法概论期末总结

写在前面 作者:夏日 博客地址:https://blog.csdn.net/zss192 本文为2022年东南大学自然辩证法概论期末总结,内容为根据老师所发题纲综合多个资料总结得来 考试形式:从老师所发题纲,10个题目中选出4个,题…...

《爆肝整理》保姆级系列教程python接口自动化(二十)--token登录(详解)

简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录。token 传参有两种一种是放在请求头里,本质上是跟 cookie 是一样的&…...

k8s种的kubectl命令

一.kubectl基本命令1.1 称述式资源管理的方法kubernetes集群管理集群资源的唯一入口是通过相应的方法调用apiserver的接口kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息…...

数组(一)-- LeetCode[26][80] 删除有序数组中的重复元素

1 删除有序数组中的重复项 1.1 题目描述 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 由于在某些语言中不能改变数组的长度&#xff0c…...

GEE学习笔记 六十三:新的地图图层ui.Map.CloudStorageLayer

在GEE中导出数据有一种方式是直接导出地图到Google Cloud Storage中,也就是Export.map.toCloudStorage(xxx),这种方式是将我们计算生成影像导出成为静态瓦片的格式存放在Google Cloud Storage中。我们可以在其他的前端程序比如OpenLayer、Mapbox GL JS等…...

ClickHouse 语法详解

ClickHouse有2类解析器:完整SQL解析器(递归式解析器),以及数据格式解析器(快速流式解析器) 除了 INSERT 查询,其它情况下仅使用完整SQL解析器。 INSERT查询会同时使用2种解析器:INSE…...

手把手教你将微信小程序放到git上

背景 首先,要创建一个自己的git仓库,这里默认大家都能够自己创建了git仓库了。如果不会创建仓库的话,百度一下,很容易就能够创建了!(后续,如有不知道在哪里,怎么创建仓库的话&#…...

功能测试3年,回顾一路走来的艰辛

不论你是什么时候开始接触测试这个行业的,你首先听说的应该是功能测试。通过一些测试手段来验证开发做出的代码是否符合产品的需求?当然你也有自己对功能测试的理解,但是最近两年感觉功能测试好像不太受欢迎,同时不少同学真的是功…...

作为Linux C/C++程序员必备的工具

Linux系统 可以选择centOS或者ubautu server(不建议选择桌面版本的)。不建议裸机安装,玩坏了就特别麻烦。不建议使用有桌面版本的ubautu,在一定程度有桌面的版本的会消耗性能。 如果经济实力允许,可以购买云服务器。 参考文章: Ubuntu server…...

docker Alpine一个只有5M小而美的Docker镜像

docker Alpine一个只有5M小而美的Docker镜像 参考链接: Alpine 一个只有5M的Docker镜像 http://www.infoq.com/cn/news/2016/01/Alpine-Linux-5M-Docker?utm_sourcetuicool&utm_mediumreferral 使用alpinelinux 构建 golang http 启动了才15mb http://blog.csdn.net/fre…...

Springboot扩展点之InstantiationAwareBeanPostProcessor

Springboot扩展点系列实现方式、工作原理集合:Springboot扩展点之ApplicationContextInitializerSpringboot扩展点之BeanFactoryPostProcessorSpringboot扩展点之BeanDefinitionRegistryPostProcessorSpringboot扩展点之BeanPostProcessorSpringboot扩展点之Instant…...

基于 U-Net 网络的遥感图像语义分割 完整代码+论文

一、研究目的U-Net 是一种由全卷积神经网络启发的对称结构网络,在医疗影像分割领域取得了很好的效果。 此次研究尝试使用 U-Net 网络在对多光谱遥感影像数据集上进行训练,尝试使用卷积神经网络自动分割出建筑,希望能够得到一种自动分割遥感影…...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、👨‍🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨‍&#x1f…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...

性能优化中,多面体模型基本原理

1)多面体编译技术是一种基于多面体模型的程序分析和优化技术,它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象,通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…...

[10-1]I2C通信协议 江协科技学习笔记(17个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...