new分配零值内存返回指针,make初始化slice、map、channel并返回值;new用于所有类型,make仅用于三种引用类型。

new 和 make 都是 Go 语言中用于内存分配的内置函数,但它们的用途和返回结果完全不同。理解它们的区别对正确使用 Go 的类型和数据结构非常重要。
new(T) 的作用是为类型 T 分配一片内存空间,并将该内存清零(即设置为类型的零值),然后返回指向这块内存的指针 *T。
例如:
ptr := new(int) *ptr = 10 fmt.Println(*ptr) // 输出 10
这里 new(int) 返回 **int 类型的指针,指向一个初始值为 0 的 int 变量,之后我们可以通过解引用赋值。
立即学习“go语言免费学习笔记(深入)”;
make(T, args...) 只能用于三种引用类型:slice、map 和 channel。它的作用是初始化这些类型的内部结构,使它们可以正常使用。
2013年07月06日 V1.60 升级包更新方式:admin文件夹改成你后台目录名,然后补丁包里的所有文件覆盖进去。1.[新增]后台引导页加入非IE浏览器提示,后台部分功能在非IE浏览器下可能没法使用2.[改进]淘客商品管理 首页 列表页 内容页 的下拉项加入颜色来区别不同项3.[改进]后台新增/修改淘客商品,增加淘宝字样的图标和天猫字样图标改成天猫logo图标4.[改进]为统一名称,“分类”改
0
例如:
slice := make([]int, 5) m := make(map[string]int) ch := make(chan int, 10)
这些类型如果只用 new 而不用 make,是无法正常使用的。比如:
m := new(map[string]int) *m = make(map[string]int) // 必须再用 make 初始化
因为 new 返回的是 **map[string]int,而 map 本身需要运行时结构支持,只有 make 才能完成完整初始化。
基本上就这些。记住:要创建可操作的 slice、map 或 channel,用 make;要获得某个类型的零值指针,可以用 new。不过在实际开发中,new 很少直接使用,更多是通过字面量或构造函数方式创建对象。
以上就是Golangnew和make的区别的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号