new用于分配任意类型的零值指针,如new(int)返回*int;make仅用于初始化slice、map、channel三种引用类型,返回类型本身而非指针,如make([]int,5)创建可使用的切片,两者不可互换。

在Go语言中,new 和 make 都是内置函数,用于内存分配,但它们的用途和返回值有本质区别,尤其在创建指针对应的值类型时容易混淆。
new(T) 用于为类型 T 分配零值内存,并返回指向该内存的指针 *T。它适用于任何类型,包括基础类型、结构体、指针等。
例如:
new(int) // 分配一个 int 类型的零值(0),返回 *int关键点:
立即学习“go语言免费学习笔记(深入)”;
make(T, args...) 仅用于 slice、map 和 channel 三种引用类型的初始化。它不仅分配内存,还会进行必要的内部结构设置,使这些类型可以正常使用。
例如:
make([]int, 5) // 创建长度为5的切片,底层数组已分配注意:
以下代码是错误的:
p := make(*int) // 错误!make 不能用于指针类型而这样是合法的:
p := new(int) // 正确:分配一个 int 并返回 *int再比如:
var m map[string]int基本原则:
基本上就这些。记住:new 返回指针,make 初始化引用类型。两者不可互换。
以上就是Golang内置函数new和make在创建指针和值类型时的差异的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号