值类型和引用类型|学习笔记

简介: 快速学习值类型和引用类型。

开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:值类型和引用类型】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9534


值类型和引用类型

 

内容介绍:

一、常见的值类型和引用类型

二、值类型和引用类型的使用特点

 

一、常见的值类型和引用类型

(1)值类型

基本数据类型 int 系列,float 系列,bool,string,数组和结构体 struct

(2)引用类型

指针、slice 切片、map、管道 chan、接口 interface 等

 

二、值类型和引用类型的使用特点

(1)值类型

变量直接储存值,内存通常在栈中分配。

值类型内存布局示意图:

var num = 100image.pngimage.png

定义的变量 num 指向的内存空间 a 中存储该变量对应的值。

(2)引用类型

变量储存的是一个地址,这个地址对应的空间才真正储存数据(值),内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就称为一个垃圾,由 GC 来回收。

引用类型(如 ref)内存布局示意图:

refimage.pngimage.png

引用类型 ref 指向的内存空间 b 中存储其地址,内存空间 b 又指向内存空间 c,内存空间储存引用类型 ref 的值。

(3)计算机的栈区和堆区示意图

栈和堆的具体含义会在数组的知识中讲解,此处可以略作了解:从数据存储角度,内存空间分为两部分,一部分叫做栈区,一部分叫做堆区,也可能还有代码区等部分。

通常情况下,值类型数据储存在栈区,引用类型数据储存在堆区,但由于在Golang中存在编译逃逸分析,会根据时间使用情况,决定数据的存储位置可能会有部分值类型数据储存在堆区,但栈和堆两者是逻辑概念,因此不影响对程序的理解。

计算机的栈区和堆区示意图image.png

相关文章
markdown字体大小颜色样式详解
【4月更文挑战第10天】Markdown不直接支持字体样式设置,但可通过HTML标签实现。如用`<font face="字体名">`改变字体,`<font color=颜色值>`改变颜色,`<font size=数字>`调整大小。组合使用如`<font face="黑体" color=green size=5>`可同时设置。注意并非所有Markdown解析器都支持这些语法,使用前需查阅解析器文档。
751 1
|
3月前
|
机器学习/深度学习 人工智能 安全
AI加速疫苗研发:从十年磨一剑到一年出成果
AI加速疫苗研发:从十年磨一剑到一年出成果
265 27
|
安全 Java Linux
|
5月前
|
人工智能 中间件 Go
Go 项目实战:全局异常处理
在 Go 项目中,异常处理是保障程序稳定性的关键。本文介绍 Go 的错误处理机制与 panic 恢复方法,并探讨如何实现全局异常处理中间件,以统一捕获和处理运行时错误,提升代码可维护性与健壮性。
313 7
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
372 2
|
10月前
|
安全 数据挖掘 BI
|
存储 Prometheus 运维
All in One:Prometheus 多实例数据统一管理最佳实践
当管理多个Prometheus实例时,阿里云Prometheus托管版相比社区版提供了更可靠的数据采集和便捷的管理。本文比较了全局聚合实例与数据投递方案,两者在不同场景下各有优劣。
63548 112
|
算法 数据可视化 新制造
Threejs路径规划_基于A*算法案例完整版
这篇文章详细介绍了如何在Three.js中完整实现基于A*算法的路径规划案例,包括网格构建、路径寻找算法的实现以及路径可视化展示等方面的内容。
499 0
Threejs路径规划_基于A*算法案例完整版
|
存储 算法 机器人
Threejs路径规划_基于A*算法案例V2
这篇文章详细介绍了如何在Three.js中使用A*算法进行高效的路径规划,并通过三维物理电路的实例演示了路径计算和优化的过程。
476 0
|
缓存 编解码 前端开发
探索PWA(Progressive Web Apps)的无限可能
探索PWA(Progressive Web Apps)的无限可能
287 0