go 我就不用指针不行?

2022-03-25 10:46:33 +08:00
 frank1256

rt ,

搜索引擎告诉我的都是,要改变属性的话就要传指针。是因为如果用值传递,会进行复制一份。这我能理解。

如果不需要改属性就使用值传递,但是不也是复制了一份吗???只不过我没修改属性罢了。

那综上改属性和不改属性都会复制。那什么时候应该用值传递?值传递的所谓的复制一份,危害性很大?那为什么 go 要设计出值传递?

还有人说无脑用指针就行?平时的 crud 里,除了查询出结果的时候,做的赋值动作。需要指针,其他函数之间的流转基本都不会去修改属性的。我用值传递不行吗。

求大佬解答

5280 次点击
所在节点    Go 编程语言
28 条回复
duckyrain
2022-03-25 17:36:16 +08:00
优先使用值传递。如果指针传递更优,go 就不会默认用值传递了。两篇文章参考:

值传递 vs 指针传递 https://goinbigdata.com/golang-pass-by-pointer-vs-pass-by-value/
值返回 vs 指针返回 https://philpearl.github.io/post/bad_go_pointer_returns/
xfriday
2022-03-25 19:43:12 +08:00
因为 go 没有 rust 的不可变借用
nightwitch
2022-03-25 21:17:58 +08:00
语言设计成值语义还是对象语义只是一种品味问题。
可以看看陈硕的文章: https://www.cnblogs.com/solstice/archive/2011/08/16/2141515.html

在默认对象语义的语言里,比如 Python 这种,想要复制一份值要显式的调用 copy.deepcopy(),否则可能在函数里意外地修改函数外变量的值,很容易创造隐藏的 bug 。
tomari
2022-03-25 21:44:54 +08:00
大一第一学期 C++课就说了啥时候传参用指针和引用,一是改变值,二是数据太大复制浪费时间和空间,依稀记得这个大一的期末考也会考。
cassyfar
2022-03-26 08:28:33 +08:00
这是 stackoverflow 大学毕业的吗?
Kasumi20
2022-03-26 15:34:12 +08:00
什么叫 go 设计出值传递, 所有的数据都是值, 包括指针也是 4 字节或者 8 字节的值, OK?
mengzhuo
2022-03-26 20:46:50 +08:00
可以,就是对其他程序员不好理解。
性能没差多少,倒是很好通过 channel 扩展。
349865361
2022-05-28 14:00:29 +08:00
我都是传递结构体的时候用引用,单变量不需要修改的直接传, 切片和 map 本身就有引用树形所以也直传

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/842797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX