make和new区别

make和new的区别

  1. make和new都是用来申请内存的
  2. new很少用,一般是给基本数据类型申请内存,string/int…,返回的是对应类型的指针(*string,*int)
  3. make是给slicemapchan申请内存的,make函数返回的是这3个类型的本身
  4. 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
  1. map在使用前一定要make;
  2. make里如果不指定map的size,则默认size为1;
  3. map的key不能重复,如果重复了,则以最后的key-value为准;
  4. map的value是可以重复的;
  5. 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"
go
本作品采用《CC 协议》,转载必须注明作者和本文链接
打不死的小强
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!