为什么golang既有结构类型的值又有指针

时间:2016-01-23 09:54:59

标签: go

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

1 个答案:

答案 0 :(得分:2)

在Go中,灵活性允许您优化程序,因为它默认是垃圾收集的。请参阅FAQ

  

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

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