Golang 值语义和引用语义

值语义和引用语义的差别在于赋值,比如下面的例子:
b=a
b.Modify()
如果b的修改不会影响a的值,那么此类型属于值类型。
如果会影响a的值,那么此类型是引用 类型。

Go语言中的大多数类型都基于值语义,包括:
基本类型,如byte、int、bool、float32、float64和string等;
复合类型,如数组(array)、结构体(struct)和指针(pointer)等。
Go语言中类型的值语义表现得非常彻底。我们之所以这么说,是因为数组。
Go语言中的数组和基本类型没有区别,是很纯粹的值类型,例如:

var a = [3]int{1, 2, 3} 
var b = a
b[1]++
fmt.Println(a, b)
// 该程序的运行结果如下:
[1 2 3] [1 3 3]。

这表明b=a赋值语句是数组内容的完整复制。要想表达引用,需要用指针:

var a = [3]int{1, 2, 3} 
var b = &a
b[1]++
fmt.Println(a, *b)
// 该程序的运行结果如下:
[1 3 3] [1 3 3]

这表明b=&a赋值语句是数组内容的引用。变量b的类型不是[3]int,而是*[3]int类型。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 14,755评论 0 38
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 8,030评论 2 9
  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 8,828评论 3 44
  • 我到底在恐惧什么? 收到了上师给我寄来的甘露丸和金刚结,我心里特别感动。有了信仰的加持,我相信,以后会越来越好。 ...
    苍穹焱心阅读 2,910评论 0 3
  • 早上醒来我并没有起床,而是等大宝叫我,闹钟响起后,大宝朦胧的喊我起床,我很痛快的答应着。大宝洗漱完,带上红领巾,...
    傻瓜也有爱阅读 1,324评论 1 3

友情链接更多精彩内容