为什么golang同时具有结构类型的值和指针

为什么golang同时具有结构类型的值和指针,go,Go,Go的设计目标之一就是简单。但是Go有结构类型的值和指针,我认为这让开发人员很难选择,而java和javascript有一个非常简单的规则:基本类型总是值,对象类型总是指针。为什么Go不采用java和javascript中的这个简单规则?或者,与指针相比,值有什么重要的优势吗?在Go中,灵活性允许您优化程序,因为默认情况下它是垃圾收集的。见: 如果可能,Go编译器将分配 是该函数的堆栈帧中的函数的局部。然而,如果 编译器无法证明变量在之后未被引用 函数返回后,编译器必须在 垃圾收集堆以避免悬空指

Go的设计目标之一就是简单。但是Go有结构类型的值和指针,我认为这让开发人员很难选择,而java和javascript有一个非常简单的规则:基本类型总是值,对象类型总是指针。为什么Go不采用java和javascript中的这个简单规则?或者,与指针相比,值有什么重要的优势吗?

在Go中,灵活性允许您优化程序,因为默认情况下它是垃圾收集的。见:

如果可能,Go编译器将分配 是该函数的堆栈帧中的函数的局部。然而,如果 编译器无法证明变量在之后未被引用 函数返回后,编译器必须在 垃圾收集堆以避免悬空指针错误


如果结构是按值返回的,则不会在堆上分配它。因此,垃圾回收器不必跟踪它来确定何时可以安全地释放分配给它的内存。

仅仅因为Java和JavaScript做了一些事情并不是明智的论据。C也有指针。这个问题会产生很多固执己见的答案。我已经在谷歌集团的golang nuts上发布了这个问题。这就是我在stackoverflow上想问的问题。对于这样一个固执己见的问题,这是一个很好的客观答案!