Go有指针,然后却没有指针运算,目标是修改一个传入函数的参数的值得效率和可能性,因此它们更像是引用而不是C的指针。
1.内存分配
Go有两个内存分配原语,make和new。
new分配内存
new(T)分配了零值填充的T类型的内存空间,并且返回其地址,一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。
make分配内存
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类型的转换。
组合
文档里竟然没写完。