Go new 与 make

Go new 与 make

在Go语言中,"new""make"都是用于动态分配内存的关键字,但它们有不同的用途和区别。

  1. "new": 在Go语言中,"new"是一个内建函数,用于值类型(基本类型和用户定义的结构体类型)分配内存,并返回指向新分配的零值的指针。值类型是直接存储值的类型,比如int、float64、struct等。"new"函数返回的指针指向一个新分配的内存空间,其中所有的位都被设置为零值。

使用"new"函数的语法如下:

ptr := new(Type)

其中,Type是要创建的值类型的名称,ptr是指向新分配内存的指针。

例如:

ptr := new(int) // 分配一个int类型的零值,并返回指向该int的指针

需要注意的是,"new"函数只分配内存,并不对初始化值进行初始化。对于引用类型(如slicemapchannel)的初始化,应该使用"make"函数。

  1. "make": 在Go语言中,"make"是一个内建函数,用于创建引用类型(slice、map和channel)的实例,并进行初始化。引用类型是指向底层数据结构的指针,它们在使用前必须进行初始化。"make"函数为引用类型分配内存,并进行一些内部设置,然后返回一个已初始化的引用类型的实例。

使用"make"函数的语法如下:

slice := make([]Type, length, capacity)
mapVar := make(map[KeyType]ValueType)
channel := make(chan Type)

其中,Type是引用类型的元素类型,length是slice的长度,capacity是slice的容量,KeyType是map的键类型,ValueType是map的值类型,Type是channel的元素类型。

例如:

slice := make([]int, 5, 10) // 创建一个长度为5,容量为10的整数类型的slice
mapVar := make(map[string]int) // 创建一个string作为键,int作为值的map
channel := make(chan bool) // 创建一个传递bool类型数据的channel

总结区别:

  • "new"函数用于值类型(基本类型和结构体类型)的内存分配,不会对对象进行初始化,返回指向零值的指针。
  • "make"函数用于引用类型(slice,map,channel)的内存分配和初始化,在分配内存后进行了一些内部设置,返回已初始化的引用类型实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值