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值类型与引用类型的区别相关推荐

  1. 值类型与引用类型的区别

    可以这样理解: 值类型保存的是具体的值 引用类型保存的是值的地址 例如 int a = 1; int b = a; b++; 这时b为2,a仍然是1 再看引用类型,例如有个类型是 User User ...

  2. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  3. C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

    1.C#类和接口的区别 接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念! 而类是负责功能的具体实现! 在类中也有抽象类的定义,抽象类与接口的区别在于: 抽象类是一个不完全的类,类 ...

  4. 值类型和引用类型及其区别!

    值类型和引用类型的基类 引用类型和值类型都继承自System.Object类.不同的是,几乎所有的引用类型都直接从System.Object继承,而值类型则继承其子类,即直接继承System.Valu ...

  5. 值类型和引用类型的区别[转]

    似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还 ...

  6. java 值类型与引用类型_Java值类型和引用类型的区别

    似乎"值类型和引用类型的区别"是今年面试的流行趋势,我已然是连续三次(目前总共也就三次)面试第一个问题就遇到这个了,这是多大的概率啊,100%,哈哈,我该买彩票去! 言归正传,咱还 ...

  7. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)

    在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...

  8. 值类型和引用类型的区别

    一.定义 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...

  9. C# 值类型和引用类型的区别

    文章目录 二者在内存中的存储方式 二者区别的补充与总结 C# 的变量类型可以分为值类型和引用类型. 常见的值类型和引用类型可参考下面这个表格: 注:C# 的 struct 是值类型,这个很容易被忽略. ...

最新文章

  1. android canvas_Android仿IOS11 控制中心进度条
  2. Java设计模式(四):工厂设计模式
  3. 应聘腾讯,面试官和我聊了一个小时的人生
  4. SparkSQL 控制文件输出的大小
  5. 缓存-分布式锁-缓存一致性解决
  6. 找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)(算法导论第三版9.3-8)
  7. c语言自动计算时间,C语言 · 计算时间
  8. .net与.net core学习目录
  9. IS-IS详解(四)——IS-IS Hello报文详解
  10. echart的x轴换行
  11. android点击vcf文件,Android vcard使用示例,生成vcf文件
  12. QQ、UC手机浏览器访问电脑版网页
  13. 关于华为设备远程登录telnet和ssh的配置
  14. 网站如何知道浏览器的用户在使用什么语言?
  15. uniapp平台使用vant组件按需引入,并兼容到微信、百度、抖音小程序
  16. Rabbitmq消息中心_消息追踪
  17. C++设计模式——组合模式(高屋建瓴)
  18. zdhadljaljdjadajdjald
  19. java毕业设计——基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码)——贪吃蛇游戏
  20. 多闪、马桶MT、聊天宝 三英战吕布?

热门文章

  1. 微博实名制下的新商规
  2. 移动手机为什么还有话费,就停机了,和客服的谈话
  3. java uno游戏_为什么我怎么也明白uno牌C++和JAVA算法实现
  4. 中国工程院岳国君院士被查!
  5. 计算机断电后自动启动,电脑开机自动断电,教您电脑开机自动断电怎么解决
  6. 阿甘修理机器人cd_剑网三遗失的美好兑换哪个好?遗失的美好兑换攻略
  7. 电话号码与英文单词对应
  8. 【Redis】Redis持久化之RDB详解(Redis专栏启动)
  9. 深入理解Java虚拟机(第二版) 第六章:类文件结构
  10. 计算机控制面板的知识,职称计算机WindowsXP知识点:控制面板