make和new的区别

本文详细探讨了Go语言中make与new的区别。make()仅用于初始化slice、map和channel,返回已初始化的非零值对象。new()则为任意类型分配零值内存并返回其指针。此外,文章还解答了关于Go零值、返回零值指针的含义,以及为何在slice、map和channel中使用make()的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

make和new的区别

文章v2版

make和new的区别

作用对象

make 只能用于slice,chan,map 对这些对象进行初始化

new 用于 golang任意type 自定义类型和 内置数据类型

语义

make(T,args) 初始化内置数据结构(slice,chan,map)

new(T) 根据传入的类型,分配一片零值的内存空间,并返回指向这片内存空间的指针 value *T ,显示的创建了对象的一个指针,而不必使用&T对获取该对象的地址。

官方

Allocation with new

Go has two allocation primitives, the built-in functions new and make. They do different things and apply to different types, which can be confusing, but the rules are simple. Let’s talk about new first. It’s a built-in function that allocates memory, but unlike its namesakes in some other languages it does not initialize the memory, it only zeros it. That is, new(T) allocates zeroed storage for a new item of type T and returns its address, a value of type *T. In Go terminology, it returns a pointer to a newly allocated zero value of type T.

核心意思:new不会初始化内存,new(T)只是分配一个零值的存储空间,并返回指向该空间的一个地址,这个值的类型*T

Allocation with make

Back to allocation. The built-in function make(T,args) serves a purpose different from new(T). It creates slices, maps, and channels only, and it returns an initialized (not zeroed) value of type T (not *T). The reason for the distinction is that these three types represent, under the covers, references to data structures t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值