赞
踩
在Go语言中,make和new都是用于创建数据结构的内置函数,区别:
分配内存的区别
返回类型的区别
初始化的区别
简单理解就是:new返回指针,而make返回的是类型。
new的语法是:func new(Type) *Type;
而make的语法为:func make(t Type, size …IntegerType) Type。
make和new都是golang用来分配内存的內建函数,且在 堆上分配内存 。但不同的是,new分配空间后,是将内存清零,并没有初始化内存;而make分配空间后,是初始化内存,而不是清零。
package main
import (
"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
切片是否为 nil:false
使用 new 关键字创建的切片 slice 的值是一个 指向空切片的指针 &[],切片的长度为 0,但它并不是 nil,因为它指向了一个真实的切片对象。
==========
对比使用make创建切片的效果
package main import ( "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 创建的切片指针: &[]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。