也不是非得new()才行呀。
var conn net.Conn
x := &conn
对于一些内置的非复合类型也是同样的。
看起来,new()应该就是一个构造函数:
func NewInt() * int {
var a int
return &a
}
这种情形让我想起了c++的new,它封装了C语言的malloc并以关键字的形式出现 。
它带来的好处是显而易见的,能更方便更安全地管理内存。
但是 go语言是基于垃圾收集的,显然目标并不在内存管理。
我还是认为这只是语法糖而已。
我现在怀疑它是否在模拟C语言的指针。
就如
p := new(T) //给出一个T类型对象的引用p,相当于C语言指针的概念;
p = a //指向(引用)另一个T类型对象。
make()好象也是这个意图,slice 、map、channel既具特殊性又常用,golang就把它的构造函数也实现了。
所以,我认为它们都是语法糖。