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

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

开发者学堂课程【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解析器都支持这些语法,使用前需查阅解析器文档。
627 1
|
11月前
|
监控 关系型数据库 数据库
怎样分析慢查询日志?
【10月更文挑战第29天】怎样分析慢查询日志?
313 2
|
8月前
|
安全 数据挖掘 BI
|
存储 Prometheus 运维
All in One:Prometheus 多实例数据统一管理最佳实践
当管理多个Prometheus实例时,阿里云Prometheus托管版相比社区版提供了更可靠的数据采集和便捷的管理。本文比较了全局聚合实例与数据投递方案,两者在不同场景下各有优劣。
63324 121
|
缓存 编解码 前端开发
探索PWA(Progressive Web Apps)的无限可能
探索PWA(Progressive Web Apps)的无限可能
212 0
|
存储 Java API
|
JavaScript 调度
setTimeout和setImmediate以及process.nextTick的区别?
setTimeout和setImmediate以及process.nextTick的区别?
262 0
|
Web App开发 存储 移动开发
Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.异常处理
Uncaught (in promise) DOMException: The play() request was interrupted by a new load request.异常处理
1481 0
1分钟入门angular动画效果animations,敲简单滴哟~~
1分钟入门angular动画效果animations,敲简单滴哟~~
1分钟入门angular动画效果animations,敲简单滴哟~~