无名阁,只为技术而生。流水不争先,争的是滔滔不绝。

(golang make new 区别) 浅析Golang中make和new的用法区别 Go语言中的内存分配:new vs make 全网首发(图文详解1)

前沿技术 Micheal 3个月前 (06-22) 33次浏览 已收录 扫描二维码

(golang make new 区别) 浅析Golang中make和new的用法区别

在Go语言中,makenew都是用来分配内存的内建函数,但是它们之间有一些关键的区别,并且适用于不同类型的场景。

首先来看new函数。new(T)会为T类型的新项分配已置零的内存空间,并返回它的地址,也就是一个*T类型的值(指向T类型的指针)。使用new函数分配的内存是零值初始化的。这意味着对于int类型,它会被初始化为0;对于指针类型,它会被初始化为nil等。new主要用于值类型,如int、float、bool、arrays等的内存分配。

下面是使用new的一个例子:

ptr := new(int) // 分配内存
*ptr = 100      // 设置值
fmt.Println(*ptr) // 输出值

在上面的例子中,new(int)创建了一个指向int类型零值的指针。

make函数是专门用来创建slice、map和channel,并返回一个有初始值(非零值)的T类型,而不是*T。这是makenew之间的一个主要区别。使用make创建的slice、map、channel是被初始化了的,也就是说它们已经在内存中有了一定的空间或者结构,可以直接使用。

以下是使用make的例子:

s := make([]int, 10) // 创建一个长度为10的slice
m := make(map[string]int) // 创建一个map
c := make(chan int) // 创建一个channel

在上述的slice示例中,我们创建了一个有10个整型零值的slice。对于map和channel,我们也分配了内存并初始化了它们的结构,可以直接在它们上进行操作。

总而言之,使用newmake取决于你想创建的类型:

  • 使用new来分配值类型(如int、struct等),它会返回指向零值初始化的内存的指针。
  • 使用make来分配slice、map和channel,它会返回初始化的对象本身,而不是指向它们的指针。

请根据你实际的开发需要选择合适的函数。
(dnf机械师95版本装备选择) DNF95版本女机械史诗套怎么选 95ss套女机械选择推荐 95级女机械师史诗套选择 全网首发(图文详解1)
(react面试) 2023年最新react面试题总结大全(附详细答案) 2023年的React面试题可能会包括各种不同的问题 全网首发(图文详解1)

喜欢 (0)
[]
分享 (0)
关于作者:
流水不争先,争的是滔滔不绝