首页 > 后端开发 > Golang > 正文

如何使用new创建Go指针变量_Go new指针创建方式说明

P粉602998670
发布: 2025-12-15 17:03:31
原创
114人浏览过
new是Go中用于在堆上分配指定类型零值内存并返回其指针的内置函数,仅执行分配、置零、返回指针三步,不调用构造函数;适用于需零值指针且类型复杂、泛型或反射等场景。

如何使用new创建go指针变量_go new指针创建方式说明

new 是 Go 语言内置函数,用于在堆上分配指定类型的零值内存,并返回指向该内存的指针。它不调用构造函数(Go 没有构造函数),也不执行初始化逻辑,只做“分配 + 置零 + 返回指针”三件事。

new 的基本语法和行为

语法:new(T),其中 T 是任意类型(不能是接口、未定义类型或抽象类型如 func 或 map)。
返回值:类型为 *T 的指针,指向一个刚分配的、值为 T 类型零值的内存块。

  • new(int) → 返回 *int,指向值为 0 的 int
  • new(string) → 返回 *string,指向值为 "" 的 string
  • new([]int) → 返回 *[]int,指向值为 nil 的切片
  • new(struct{a int}) → 返回指向字段 a = 0 的 struct 实例的指针

new 和 & 取地址的区别

& 作用于一个已存在的变量,取其地址;new 是直接分配新内存并返回指针,无需先声明变量。

  • p := &x:x 必须已定义(比如 x := 42),p 是 x 的地址
  • p := new(int):一步到位,等价于先声明 var tmp int 再取地址 &tmp,但 tmp 不可访问

什么时候该用 new?

实际开发中,new 使用频率远低于 &T{} 或字面量取地址。它主要适合以下场景:

  • 需要一个指向零值的指针,且类型名较长或嵌套较深,写 &T{} 显得冗余(例如 new(map[string][]byte)
  • 泛型或反射场景中,类型 T 在编译期未知,只能靠 new(T) 动态分配
  • 某些标准库内部实现(如 sync.Pool 的 New 字段回调)会约定使用 new 初始化零值

⚠️ 注意:new([]int) 得到的是 *[]int(指向 nil 切片),不是可直接 append 的切片指针;若需可操作的 slice,应写 &[]int{}[0:0] 或更推荐用 make([]int, 0) 配合取地址。

对比 make 和 new

make 仅用于 slicemapchan 三种引用类型,返回的是值(不是指针),且完成初始化(如分配底层数组、哈希表结构等);new 适用于任意类型,返回指针,只做零值分配。

  • new([]int)*[]int,值为 nil
  • make([]int, 5)[]int,长度 5,元素全为 0
  • &[]int{1,2,3}*[]int,指向含三个元素的 slice(更常用、更直观)

基本上就这些。new 是个简单但容易被高估的函数——多数时候,用字面量加 & 更清晰,只有明确需要“零值指针”且无初始化需求时才选它。

以上就是如何使用new创建Go指针变量_Go new指针创建方式说明的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号