美文网首页
【Golang】类型初始化 - new() 和 make() 的

【Golang】类型初始化 - new() 和 make() 的

作者: 马蹄哒 | 来源:发表于2020-02-18 15:43 被阅读0次

    Golang构造类型有三种方式:

    1. new()函数
      用法:new(T);T 代表数据类型,包括自定义的type(struct)
      new返回一个指针(*T),指向类型T的零值
    type SyncedBuffer struct {
        lock    sync.Mutex
        buffer  bytes.Buffer
    }
    p := new(SyncedBuffer)  // type *SyncedBuffer
    var v SyncedBuffer      // type  SyncedBuffer
    
    1. make()函数
      用法:make只能用于切片(slice),映射(map),通道(channel)三种类型
      make([]type, length [, capacity]) :创建slice,容量参数可选
      make(map[type]type, length) :创建map
      make(chan type [, length]) :创建channel,缓存参数可选
      make返回类型本身(T),非零值,非指针(*T)
    var p *[]int = new([]int)       // 创建切片; *p == nil;极少用这种方式
    var v  []int = make([]int, 100) // 切片v引用长度为100个int类型的数组
    
    // 没必要
    var p *[]int = new([]int)
    *p = make([]int, 100, 100)
    
    // 最佳用法
    v := make([]int, 100)
    

    3.复合声明(Composite literals)
    类型声明时直接初始化值

    s := []string{"foo", "bar"}
    m := map[string]string{"foo": "bar"}
    

    相关文章

      网友评论

          本文标题:【Golang】类型初始化 - new() 和 make() 的

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