new分配零值内存并返回指针,适用于任意类型;make初始化slice、map、channel并返回原类型,仅用于引用类型。示例:new(int)返回*int,初始为0;make(map[string]int)创建可操作的map。关键区别:new返回指针且仅清零,make返回非指针并完成初始化。错误使用如new(map)会导致nil panic。实践中优先用短变量声明替代new,而make在需预设容量时必不可少,正确使用可避免运行时错误。
在Go语言中,make 和 new 是两个内置的内存分配函数,但它们的用途和行为有显著区别。理解它们的差异并正确使用,对编写高效、安全的Go代码至关重要。
new 的作用是为指定类型分配一片内存空间,并将该内存清零(即赋予类型的零值),然后返回指向该内存的指针。
其函数签名如下:
func new(T) *T
它适用于任何类型 T,返回一个指向新分配的、零值的 T 类型变量的指针。
示例:
ptr := new(int)
fmt.Println(*ptr) // 输出 0
*ptr = 42
fmt.Println(*ptr) // 输出 42
这里 new(int) 分配了一个 int 类型的内存空间,初始值为 0,返回 *int 类型的指针。
注意:new 不适用于 map、slice 或 channel,因为这些类型的零值无法直接使用(如 map 的零值是 nil,不能直接赋值)。
make 用于初始化 slice、map 和 channel 这三种引用类型,使其处于可用状态。它不返回指针,而是返回类型本身。
其函数签名:
func make(T, args...)
其中 T 必须是 slice、map 或 channel。
常见用法:
示例:
slice := make([]int, 5, 10)
m := make(map[string]int)
ch := make(chan int, 5)
如果不使用 make 直接声明引用类型,它们的值为 nil,无法直接操作:
var m map[string]int
m["key"] = "value" // panic: assignment to entry in nil map
T),make 返回原类型(T)举例说明:
ptr := new(map[string]int)
fmt.Println(ptr) // 输出指针地址
fmt.Println(*ptr) // 输出 map[string]int(nil)(*ptr)["test"] = 1 // panic: assignment to entry in nil map
即使用了 new,map 仍是 nil。必须用 make 才能真正初始化:
m := make(map[string]int)
m["test"] = 1 // 正常工作
大多数情况下,不需要手动使用 new。Go 支持短变量声明和自动取址,更推荐直接声明变量或使用复合字面量。
比如代替 new(int):
i := 0
ptr := &i
对于结构体,也推荐使用字面量方式:
type Person struct { Name string }
p := &Person{Name: "Alice"}
而 make 在处理 slice、map、channel 时不可或缺,尤其是在需要预设容量或缓冲大小时,合理使用 make 能提升性能。
基本上就这些。掌握 make 和 new 的区别,能避免常见 nil 指针或运行时 panic,写出更稳健的 Go 程序。
# go
# golang
# go语言
# 区别
# String
# 结构体
# int
# 指针
# 引用类型
相关文章:
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
如何破解联通资金短缺导致的基站建设难题?
高端网站建设与定制开发一站式解决方案 中企动力
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
怀化网站制作公司,怀化新生儿上户网上办理流程?
利用JavaScript实现拖拽改变元素大小
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何选择适合PHP云建站的开源框架?
如何在IIS中配置站点IP、端口及主机头?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
定制建站价位费用解析与套餐推荐全攻略
如何用PHP工具快速搭建高效网站?
如何快速查询域名建站关键信息?
如何选购建站域名与空间?自助平台全解析
如何用花生壳三步快速搭建专属网站?
如何基于云服务器快速搭建网站及云盘系统?
建站之星上传入口如何快速找到?
如何自定义建站之星模板颜色并下载新样式?
如何零基础在云服务器搭建WordPress站点?
开心动漫网站制作软件下载,十分开心动画为何停播?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何通过FTP空间快速搭建安全高效网站?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
建站之星伪静态规则如何设置?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
建站之星在线版空间:自助建站+智能模板一键生成方案
为什么Go需要go mod文件_Go go mod文件作用说明
宿州网站制作公司兴策,安徽省低保查询网站?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何通过FTP服务器快速搭建网站?
如何零基础开发自助建站系统?完整教程解析
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
建站之星代理平台如何选择最佳方案?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
开源网站制作软件,开源网站什么意思?
如何确保FTP站点访问权限与数据传输安全?
如何选择美橙互联多站合一建站方案?
如何通过可视化优化提升建站效果?
如何通过VPS建站实现广告与增值服务盈利?
建站主机SSH密钥生成步骤及常见问题解答?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
重庆市网站制作公司,重庆招聘网站哪个好?
专业网站制作服务公司,有哪些网站可以免费发布招聘信息?
开封网站制作公司,网络用语开封是什么意思?
济南专业网站制作公司,济南信息工程学校怎么样?
*请认真填写需求信息,我们会在24小时内与您取得联系。