go的引用类型包含 slice
、map
、channel
内置函数new
和make
创建引用类型的区别:
new
:会根据类型的大小,分配该大小的零值空间,然后返回该空间首地址,也就是指针。
make
:会被编译器翻译成具体的创建函数,由其分配内存和初始化成员变量,返回对象,而非指针。
不要使用new
,永远用make
来构造引用对象
如果你错误的使用 new() 分配了一个引用对象,你会获得一个空引用的指针,相当于声明了一个未初始化的变量并且取了它的地址。
package main
import (
"fmt"
)
func main() {
a := make([]int, 3)
a[1] = 10
b := new([]int)
b[1] = 20 //error : invalid operation: b[1] (type *[]int does not support indexing)
}
我是咕咕鸡,一个还在不停学习的全栈工程师。
热爱生活,喜欢跑步,家庭是我不断向前进步的动力。