golang new和make的区别
2017-10-25 13:31
316 查看
自:http://www.cnblogs.com/ghj1976/archive/2013/02/12/2910384.html
make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。
内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。
内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型,而不是*T。
本质来讲,导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。
make 是 引用类型 初始化的方法。
make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。
内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。
内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型,而不是*T。
本质来讲,导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的(非零)值。
make 是 引用类型 初始化的方法。
相关文章推荐
- golang中make和new的区别
- golang中make和new的区别示例详解
- Golang中new和make的区别
- Golang中new和make的区别
- Golang中make与new的区别
- 【GoLang】GoLang 中 make 与 new的区别
- Golang中new和make的区别
- Golang中new和make的区别
- golang的内存模型与new()与make()
- Go中的make和new的区别
- golang的内存模型与new()与make()
- new与make的区别
- go中new和make的区别?
- Go内建函数(对于引用类型) new 和 make 的区别
- golang make & new
- Go语言中new与make的区别
- Golang 中new和make的区别简单分析
- Go 语言中的 new() 和 make()的区别
- golang日記 - Go-new,make和Java-new
- 深入讲解Go语言中函数new与make的使用和区别