golang中new和make总结

作者: Tim_SSS | 来源:发表于2018-06-03 19:51 被阅读0次

    new简介及使用方式

    • new() 用于返回类型指针,这个操作:分两步,第一步:初始化一个变量为零的值,第二步:生成一个指向类型变量的地址。
    • &Type 返回类型变量的地址,这个操作:分两步,第一步:初始化一个变量(变量值可以不为零)的值,第二步:生成类型变量的地址并返回。
    • 相同点和不同点:
      都是返回指向变量的地址
      new()不支持初始化变量的值(默认值都是零),&Type支持初始化自定义变量的值
    • 使用方式
    type SyncedBuffer struct {
        str string
        num int
        sum int
    }
    m := new(SyncedBuffer)
    fmt.Println("new m 变量输出:", m)  //new m 变量输出: &{ 0 0}
    m1 := SyncedBuffer{}
    fmt.Println("普通赋值 m1 变量输出:",m1) // 普通赋值 m1 变量输出: { 0 0}
    m2 := &SyncedBuffer{} 
    fmt.Println("&Type赋值 m2 变量输出:", m2) // &Type赋值 m2 变量输出: &{ 0 0}
    m3 := &SyncedBuffer{"123",123, 44} 
    fmt.Println("&Type赋值 带有初始值的m3 变量输出:", m3)//&Type赋值 带有初始值的m3 变量输出: &{m3Test 123 44}
    

    make简介及使用方式

    • make() 只作用于创建slice、map、channel这三种,这三种类型本来就是引用类型。
    • 使用方式:
      make(Type, size, num) return Type
    Slice := make([]int, 3, 5) //  生成一个int类型切片,初始长度:3,容量:5
    Map := make(map[string]int,5) // 生成一个键string值int类型的字典,长度:5
    Chan := make(chan int, 5)  // 生成一个int类型的通道,长度:5
    

    new和make使用场景

    new || &Type 场景:
    new() 变量类型里面的值,是零值,就可以,不需要动态变化,比如type struct 属性全是锁。&type 可以自定义初始化变量的值,也可以像new()一样,默认生成值(零值),这样做的好处,不用想c语言那样,申请一个变量,在取地址,赋值给指针变量,简化操作,注重实用。
    make 使用场景:
    使用map、silce、channel三种资源类型,自己通过这三种组合方式,定义的类型。

    欢迎吐槽,☺️

    相关文章

      网友评论

        本文标题:golang中new和make总结

        本文链接:https://www.haomeiwen.com/subject/nrpldftx.html