make和new区别
make和new的区别
- make和new都是用来申请内存的
- new很少用,一般是给基本数据类型申请内存,string/int…,返回的是对应类型的指针(*string,*int)
- make是给
slice
、map
、chan
申请内存的,make函数返回的是这3个类型的本身 - new返回了该类型的零值,make返回了类型的初始值(eg int 0)
new —> initializes to 0 value of the type
make —> does not initialize to 0 value of the type
map和slice
声明是不会分配内存的,初始化需要make,分配内存后才能赋值和使用。
func main() {
var a map[string]string
a["n1"] = "宋江"
a["n2"] = "吴用"
a["n3"] = "武松"
fmt.Println(a)
}
// 输出:
//panic: assignment to entry in nil map
//goroutine 1 [running]:
//main.main()
// E:/study/src/code/test/main.go:9 +0x32
//exit status 2
- map在使用前一定要make;
- make里如果不指定map的size,则默认size为1;
- map的key不能重复,如果重复了,则以最后的key-value为准;
- map的value是可以重复的;
- map的key-value是无序的。
map初始化方式
//第一种 // 声明 var a map[string]string // make a = make(map[string]string, 2) // 赋值 a["no1"] = "go"
//第二种 // 声明时直接make var a = make(map[string]string, 2) // 赋值 a["no1"] = "go"
//第三种 // 声明时直接make var a = make(map[string]string, 2) // 赋值 a["no1"] = "go"
本作品采用《CC 协议》,转载必须注明作者和本文链接