golang值类型与引用类型的区别
1、golang值类型与引用类型的区别
1.1 本质存储区别
值类型与引用类型的区别主要在于:
- 值类型的变量: 存储当前类型的存储的数据。值类型包括数值类型、bool、string、数组、struct结构体
- 引用类型的变量:存储地址,该地址对应的空间才是真正存储的数据。引用类型包括:指针、slice切片、管道chan、map、以及interface等类型。
注意:golang中的引用类型和值类型的区别与C++中的指针类型和值类型的区别类似。而C++中的引用类型与golang中的引用类型不是同一个概念。
1.2 使用区别
- 值类型:声明变量之后可以直接使用
- 引用类型:对于引用类型,若使用var进行声明变量,必须使用make函数对其进行分配内存。若不初始化,该变量默认值为nil,向其添加元素时会导致panic。
2、示例验证
我们可以通过下面的小程序来验证上述的想法:
- 对于int类型的a,将其转换为地址进行打印,结果打印表示错误类型,不是地址类型.a:%!p
- 对于map类型b,将其转换为地址打印可看出其存储的为指针类型且为0xc000078150,将其传入函数中,该函数接受的参数值也为该变量存储的地址值test:0xc000078150。
package mainimport "fmt"func test(test map[string]string) {// test:0xc000078150fmt.Printf("test:%p\n", test)// &test:0xc000098028fmt.Printf("&test:%p\n", &test)
}func main() {a := 10// a:%!p(int=10)fmt.Printf("a:%p\n", a)// &a:0xc000096010fmt.Printf("&a:%p\n", &a)b := map[string]string{}// b:0xc000078150fmt.Printf("b:%p\n", b)// &b:0xc000098020fmt.Printf("&b:%p\n", &b)test(b)
}
golang值类型与引用类型的区别相关推荐
- 值类型与引用类型的区别
可以这样理解: 值类型保存的是具体的值 引用类型保存的是值的地址 例如 int a = 1; int b = a; b++; 这时b为2,a仍然是1 再看引用类型,例如有个类型是 User User ...
- java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别
[Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...
- C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类 ...
- 值类型和引用类型及其区别!
值类型和引用类型的基类 引用类型和值类型都继承自System.Object类.不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即直接继承System.Valu ...
- 值类型和引用类型的区别[转]
似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还 ...
- java 值类型与引用类型_Java值类型和引用类型的区别
似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还 ...
- swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)
在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...
- 值类型和引用类型的区别
一.定义 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...
- C# 值类型和引用类型的区别
文章目录 二者在内存中的存储方式 二者区别的补充与总结 C# 的变量类型可以分为值类型和引用类型. 常见的值类型和引用类型可参考下面这个表格: 注:C# 的 struct 是值类型,这个很容易被忽略. ...
最新文章
- android canvas_Android仿IOS11 控制中心进度条
- Java设计模式(四):工厂设计模式
- 应聘腾讯,面试官和我聊了一个小时的人生
- SparkSQL 控制文件输出的大小
- 缓存-分布式锁-缓存一致性解决
- 找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)(算法导论第三版9.3-8)
- c语言自动计算时间,C语言 · 计算时间
- .net与.net core学习目录
- IS-IS详解(四)——IS-IS Hello报文详解
- echart的x轴换行
- android点击vcf文件,Android vcard使用示例,生成vcf文件
- QQ、UC手机浏览器访问电脑版网页
- 关于华为设备远程登录telnet和ssh的配置
- 网站如何知道浏览器的用户在使用什么语言?
- uniapp平台使用vant组件按需引入,并兼容到微信、百度、抖音小程序
- Rabbitmq消息中心_消息追踪
- C++设计模式——组合模式(高屋建瓴)
- zdhadljaljdjadajdjald
- java毕业设计——基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码)——贪吃蛇游戏
- 多闪、马桶MT、聊天宝 三英战吕布?
热门文章
- 微博实名制下的新商规
- 移动手机为什么还有话费,就停机了,和客服的谈话
- java uno游戏_为什么我怎么也明白uno牌C++和JAVA算法实现
- 中国工程院岳国君院士被查!
- 计算机断电后自动启动,电脑开机自动断电,教您电脑开机自动断电怎么解决
- 阿甘修理机器人cd_剑网三遗失的美好兑换哪个好?遗失的美好兑换攻略
- 电话号码与英文单词对应
- 【Redis】Redis持久化之RDB详解(Redis专栏启动)
- 深入理解Java虚拟机(第二版) 第六章:类文件结构
- 计算机控制面板的知识,职称计算机WindowsXP知识点:控制面板