佛山做网站的哪个好,wordpress 左侧导航菜单,免费前端模板网站,商务网站建设流程200字参考链接 https://worktile.com/kb/ask/38441.html 在Go语言中#xff0c;make和new都是用于创建数据结构的内置函数#xff0c;区别#xff1a; 分配内存的区别 返回类型的区别 初始化的区别 分配内存的区别
make 用于创建切片、映射和通道等 引用类型 的数据结构。new 用… 参考链接 https://worktile.com/kb/ask/38441.html 在Go语言中make和new都是用于创建数据结构的内置函数区别 分配内存的区别 返回类型的区别 初始化的区别 分配内存的区别
make 用于创建切片、映射和通道等 引用类型 的数据结构。new 用于创建结构体、数组和基本数据类型等 值类型 的数据结构。
返回类型的区别
make的返回类型与其参数的类型相同而不是指向它的指针因为这三种数据类型本身就是引用类型。make 函数的返回值是引用类型的零值通常是一个指向底层数据结构的指针。new返回的是指向类型的指针
简单理解就是new返回指针而make返回的是类型。 new的语法是func new(Type) *Type 而make的语法为func make(t Type, size …IntegerType) Type。 初始化的区别
make和new都是golang用来分配内存的內建函数且在 堆上分配内存 。但不同的是new分配空间后是将内存清零并没有初始化内存而make分配空间后是初始化内存而不是清零。
make 函数返回的是已经初始化的数据结构例如make([]int, 0)会创建一个空的整型切片make(map[string]int)会创建一个空的字符串到整数的映射。new 函数分配的内存空间是零值化的即分配的内存会被初始化为零值 如果new 切片会怎么样
package mainimport (fmt
)func main() {slice : new([]int)fmt.Printf(切片的类型%T\n, slice)fmt.Printf(切片的值%v\n, slice)fmt.Printf(切片的长度%d\n, len(*slice))fmt.Printf(切片是否为 nil%t\n, slice nil)
}
结果
切片的类型*[]int
切片的值[]
切片的长度0
切片是否为 nilfalse使用 new 关键字创建的切片 slice 的值是一个 指向空切片的指针 []切片的长度为 0但它并不是 nil因为它指向了一个真实的切片对象。 对比使用make创建切片的效果
package mainimport (fmt
)func main() {// 使用 make 创建切片slice1 : make([]int, 5) // 创建一个包含 5 个整数的切片fmt.Println(使用 make 创建的切片, slice1)// 使用 new 创建切片slicePtr : new([]int) // 创建一个指向切片的指针fmt.Println(使用 new 创建的切片指针, slicePtr)
}
使用 make 创建的切片 [0 0 0 0 0]
使用 new 创建的切片指针 []