Go有指针,而后却没有指针运算,目标是修改一个传入函数的参数的值得效率和可能性,所以它们更像是引用而不是C的指针。数组
Go有两个内存分配原语,make和new。函数
new(T)分配了零值填充的T类型的内存空间,而且返回其地址,一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。指针
make(T, args)只能建立slice, map和channel,而且返回一个有初始值(非零)的T类型,而不是*T。内存
例如文档
make([]int, 10, 100)分配了100个整数的值,而后用长度10和容量100建立了slice结构指向数组的前10个元素。编译器
new([]int)返回指向新分配的内存的指针,而零值填充的slice结构指向nil的slice值。编译
有时候零值不能知足需求,必需要有一个用于初始化的构造函数,能够经过复合声明实现。
从复合声明中获取地址,意味着告诉编译器在堆中分配空间,而不是栈中。效率
Go容许定义新德类型,经过关键字type实现,例如type foo int。
建立更复杂的类型须要用到struct关键字。构造函数
type类型的转换。map
文档里居然没写完。