这篇文章主要讲解了“go语言make 和 new的用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“go语言make 和 new的用法”吧!
make
和 new
是golang中初始化一个结构时,经常会使用到的关键子,但是这两个关键字常常让我们感到困惑。因为它们能够初始化的结构并不相同。
make
的作用是初始化内置的数据结构,例如slice(切片)、哈希表和 Channelnew
的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针例如:
//创建了一个元素为int的slice,返回的是slice的头部指针
slice := make([]int, 0, 100)
//创建了一个key为int,value为布尔类型的map,返回的是结构体指针
m := make(map[int]bool, 10)
//创建了一个元素为int的管道,返回的是结构体的指针
ch := make(chan int, 5)
而new
呢,相比与复杂的 make
关键字, 功能就简单多了,它只能接收类型作为参数然后返回一个指向该类型的指针
例如:
i := new(int)
//完全等价于new,返回的都是指针
var v int
i := &v
new
的作用是 初始化 一个指向类型的指针 (*T), make
的作用是为 slice
, map
或者 channel
初始化,并且返回引用 T
make(T, args)
函数的目的与new(T)
不同。它仅仅用于创建 Slice
, Map
和 Channel
,并且返回类型是 T(不是T*)的一个初始化的(不是零值)的实例。这中差别的出现是由于这三种类型实质上是对在使用前必须进行初始化的数据结构的引用。例如, Slice是一个 具有三项内容的描述符,包括 指向数据(在一个数组内部)的指针,长度以及容量。在这三项内容被初始化之前,Slice
的值为nil
。对于Slice
,Map
和Channel
, make()
函数初始化了其内部的数据结构,并且准备了将要使用的值
感谢各位的阅读,以上就是“go语言make 和 new的用法”的内容了,经过本文的学习后,相信大家对go语言make 和 new的用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。