Go语言make与new函数区别
Go语言make与new方法区别
在 Go 语言中,有两个比较雷同的内置函数,分别是 new
和 make
方法,其主要用途都是用于分配相应类型的内存空间。
基本特性
make
在 Go 语言中,内置函数 make
仅支持 slice
、map
、channel
三种数据类型的内存创建,其返回值是所创建类型的本身,而不是新的指针引用。
func make(t Type, size ...IntegerType) Type
实例:
func main() {
v1 := make([]int, 1, 5)
v2 := make(map[int]bool, 5)
v3 := make(chan int, 1)
fmt.Println(v1, v2, v3)
}
输出结果:
[0] map[] 0xc00001e0e0
调用 make
函数去初始化切片(slice)的类型时,会带有零值。
new
在 Go 语言中,内置函数 new
可以对类型进行内存创建和初始化。其返回值是所创建类型的指针引用,与 make
函数在实质细节上存在区别。
func new(Type) *Type
实例:
type A struct {
Name string
}
func main() {
s := new(A)
s.Name = "ares"
fmt.Println(s)
}
# &{ares}
func main() {
s := A{}
s.Name = "ares"
fmt.Println(s)
}
# {ares}
new
函数也能初始化 make
的三种类型:
v1 := new(chan bool)
v2 := new(map[string]struct{})
区别
make
函数在初始化时,会初始化 slice
、chan
、map
类型的内部数据结构,new
函数并不会。
-
make
函数: -
- 能够分配并初始化类型所需的内存空间和结构,返回引用类型的本身。
- 具有使用范围的局限性,仅支持
channel
、map
、slice
三种类型。 - 具有独特的优势,
make
函数会对三种类型的内部数据结构(长度、容量等)赋值。
-
new
函数: -
- 能够分配类型所需的内存空间,返回指针引用(指向内存的指针)。
- 可被替代,能够通过字面值快速初始化。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现