new函数
说明
在《GO程序设计语言》中的描述是:表达式new(T)创建一个为命名的T类型变量,初始化为了T类型的零值,并返回去地址(地址类型为 *T)。
示例
p := new(int)
fmt.Println(*p)
*p = 2
fmt.Println(*p)
内置函数make
make创建一个slice
《GO程序设计语言》中的描述是:可以创建一个具有指定 元素类型、长度、和容量的slice。其中容量参数可以省略,在这种情况下,slice长度和容量相等。
make([]T,len,cap)
其实make创建了一个无名数组并返回了它的一个slice;这个数组仅可以通过slice来访问。
示例
s := make([]int,5,5)
s[0]= 5
s[4] = 6
fmt.Println(s)
make创建一个map
ages := make(map[string]int)
示例
ages := make(map[string]int)
ages['Tom'] = 20
ages['Jone'] = 21
make创建一个通道
《GO程序设计语言》中的描述是:通道是一个使用make创建的数据结构的引用。当复制或者作为参数传递到一个函数时,复制的是引用,这样调用者跟被调用者都引用同一份数据结构。和其他引用类型一样,通道的零值是nil。
ch := make(chan int)
make还可以接受第二个可选参数,一个表示通道容量的整数。如果容量是0,make创建了一个无缓冲通道。
示例
ch = make(chan int) //无缓冲通道
ch = make(chan int, 0) //无缓冲通道
ch = make(chan int, 3) //容量为3的缓冲通道
区别
make 函数在初始化时,会初始化 slice、chan、map 类型的内部数据结构,new 函数并不会。