新手提问, Go 作为一个 GC 语言,为什么要设计成带指针类型的呢?

178 天前
 superhot

既然无需手动管理内存,像 Java/Python/JS 那样不在语法层面上区分 primitive value 和 reference value 不是更简洁吗?为什么不支持指针运算,却还要有指针类型呢?

4706 次点击
所在节点    Go 编程语言
25 条回复
CapNemo
178 天前
如果指 1 楼的情况,那就是一个引用传值,避免反复拷贝一些比较大的 struct 等。如果指 unsafe 里的指针,这个主要是为了方便搞一些强制类型转换和链接 c 语言库。
gam2046
178 天前
我认为极大程度上是为了 CGO 保留的指针。如果说没有 CGO ,指针的意义就少了一半。
leonshaw
178 天前
Java, python 这种,primitive 类型以外的变量都是引用。go 的变量都是值,所以需要通过指针引入 indirection 。不然同时有值类型和引用类型会让语法更晦涩,参考 C++。
yianing
178 天前
golang 除了 map ,slice ,chan 这些内置的,没有引用类型,都是值类型
zzhirong
178 天前
除了以上其他人所说,我认为还有一个重要原因,在 Go 中,对象的概念主要通过 struct 实现,而 struct 为值类型,为了让方法修改其内容,只能依靠指针,所以,只要还有值类型存在,而函数传参均为值传递,那么如果希望定义能够修改对象本身的方法,就必须使用指针。

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

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

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

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

© 2021 V2EX