0%

go语言基础1——make和new

golang中make和new的区别

共同点:都是给变量分配内存;
不同点:

  1. 返回类型不同: new创建返回指针,指向分配类型的指针,分配的空间置为零,该类型的零值;make返回变量本身,分配空间后会进行初始;

  2. 分配类型:new可以为任意类型进行分配;make只能为slice,map,chan引用类型数据进行分配空间。

数组和切片的区别

共同点:都是通过下标访问,并且都有容量长度;

不同点:

  1. 定义方式不同:数组必须指定大小,定义后不能增加容量和长度;切片不用,定义后切片数据增多,会自动扩容(当原切片长度小于1024时,新切片的容量会直接翻倍;超过1024会反复地增加25%,直到新容量超过所需要的容量);
  2. 类型不同:数值为值类型;切片为引用类型,每个切片底层引用一个数组,所以切片扩容后,便会指向一个新的底层数组,内存地址跟着改变。
for range 的时候它的地址会发生变化么?

在 for a,b := range c 遍历中,a,b只会存一份地址,循环后会重新赋值,内存地址不变;因此for中创建协程后不要传入a或b的地址,可以再循环中通过创建临时变量解决。

-------------本文结束感谢您的阅读-------------
打赏一瓶矿泉水