值类型和引用类型讲解 一、值类型: 值类型包括,基本数据类型 int系列、float系列、bool、string、数组和结构体; 值类型:变量直接存储值,内存通常在栈中分配; var num = 100 如图所示: 二、引用类型: 引用类型包括,指针、slice切片、map、管道 chan、interface等; 引用类型:变量存储一个地址,地址对应的空间才真正存储数据(值),内存通常在堆上分配。当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,由GC来回收; 引用类型 ptr 如图所示: 三、图示 栈与堆在内存中分配: 如图所示: 作者:Fe_cow丿 在编程语言中,值类型和引用类型是两种重要的数据存储方式,它们决定了变量如何在内存中存储和操作。Go 语言作为一门静态类型的系统级编程语言,也支持这两种类型。理解它们的区别对于编写高效和安全的代码至关重要。 一、值类型 值类型包括基本数据类型,如整型(int系列)、浮点型(float系列)、布尔型(bool)、字符串(string)、数组和结构体(struct)。在Go语言中,当你声明一个值类型变量并赋值时,系统会在栈内存中为该变量分配一块空间,直接存储变量的值。例如,`var num = 100`,`num`将直接保存100这个数值。由于栈内存管理效率高,但空间有限,因此值类型通常用于较小的数据结构。 值类型的特点: 1. 变量修改不会影响原值:如果将一个值类型变量复制给另一个变量,复制的是该值的一个副本,两个变量可以独立改变自己的值。 2. 传递效率较高:函数调用时,值类型作为参数传递,会复制一份值给函数,不会影响到原变量。 二、引用类型 引用类型包括指针、切片(slice)、映射(map)、通道(channel)以及接口(interface)。这些类型在内存中不直接存储值,而是存储一个指向实际数据地址的引用。引用类型变量的内存通常在堆上分配,因为它们可能需要更大的空间和更复杂的生命周期管理。 引用类型的特点: 1. 引用传递:当引用类型作为参数传递给函数时,实际上是传递了对原始数据的引用,函数内部的改动会影响到原始数据。 2. 间接访问:通过引用类型访问数据需要多一次寻址过程,但可以共享同一块内存区域,节省资源。 3. 垃圾回收:当没有变量引用某个引用类型的数据时,垃圾收集器(GC)会回收这块内存。 三、栈与堆的区别 栈内存主要用来存储局部变量和函数调用的信息,它的管理非常高效,但空间有限。而堆内存则用来存放大对象和引用类型,分配和回收相对复杂,但可以动态调整大小。 当创建一个引用类型时,如切片或映射,它们在堆上分配,其引用(指针)在栈上。当没有其他变量持有这个引用时,垃圾收集器会回收堆上的空间。如图所示,栈中的变量只保存地址,实际的数据存储在堆中,当变量生命周期结束,对应的堆内存就会被标记为可回收。 Go 语言中的值类型和引用类型各有优缺点,根据具体应用场景选择合适的类型,可以优化程序性能和内存使用。理解这两者的概念和工作原理,有助于编写出更高效和可控的Go代码。























- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 地下工程实习报告.doc
- 房产)办公区域服务作业指引(001).doc
- 重新定义微信小程序的开发.zip
- 印章销毁会签单.doc
- 北京某医院手术室装修工程招标代理合同.doc
- 地下连续墙施工质量验收规范-.doc
- 微信小程序 C# SDK,Senparc.Weixin.WxOpen.dll.zip
- 综合楼测量方案.doc
- 个体工商户雇工劳动合同书.docx
- 奶茶点单微信小程序.zip
- 物业接管验收要求及规程WINWGZAL.GC364.doc
- [北京]地标性超高层塔楼底板钢筋施工方案ser.doc
- 微信小程序 之『Ble蓝牙』.zip
- 微信小程序示例教程.zip
- 安装造价员考试用基础知识汇编.doc
- 地铁自动售检票系统施工组织设计.doc



评论0