golang学习之new()、make() 区别

make 函数只用于 map,slice 和 channel,并且不返回指针。如果想要获得一个显式的指针,可以使用 new 函数进行分配,或者显式地使用一个变量的地址。

Go语言中的 new 和 make 主要区别如下:

    • make 只能用来分配及初始化类型为 slice、map、chan 的数据。new 可以分配任意类型的数据;
    • new 分配返回的是指针,即类型 *Type。make 返回引用,即 Type;
    • new 分配的空间被清零。make 分配空间后,会进行初始化;

make 关键字的主要作用是创建 slice、map 和 Channel 等内置的数据结构,而 new 的主要作用是为类型申请一片内存空间,并返回指向这片内存的指针。

代码示例:

package main

import "fmt"
func main() {

	i := new(int)             //返回的是指针地址

	 //var map1 map[string]int
     map2 := make(map[string]int,1)
	 fmt.Println("赋值前的值:",map2)    //返回的是map本身
	//slice1 := make([]int,1)
	 //slice1 = append(slice1, 1)
	 //slice1 = append(slice1,2)
     map2["sdsds"] = 1
     //map2["dsswww"] = 2
	 //fmt.Println(map1)
     fmt.Println("赋值后的值:",map2)
     //fmt.Println(slice1)
	 fmt.Println("i 的值为 %d",i)

}

输出结果:

赋值前的值: map[]
赋值后的值: map[sdsds:1]
i 的值为 %d 0xc00000a0d0

你可能感兴趣的:(golang学习)