Golang构造类型有三种方式:
- 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
- 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"}