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

2020-02-18  本文已影响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"}
上一篇 下一篇

猜你喜欢

热点阅读