关于Golang make关键字的二三事
make的介绍
make的作用是初始化内置的数据结构,切片、哈希、管道
它的使用方式无非是
//初始化切片
s := make([]string, 0, 10)
//初始化map(map必须初始化后使用)
m := make(map[string]string, 10)
make的原理
make严格意义上来说是golang提供给开发者的语法糖,在编译期间,make
会被替换为具体的特性函数。
case OMAKE:
args := n.List.Slice()
n.List.Set(nil)
l := args[0]
l = typecheck(l, Etype)
t := l.Type
i := 1
switch t.Etype {
case TSLICE:
...
case TMAP:
...
case TCHAN:
...
}
n.Type = t
make slice
检测包括
1.切片的长度参数是否被传入
2.切片的长度必须小于或者等于切片的容量
除了对参数的数量和合法性进行校验,还会将操作改为OMAKESLICE
,方便后面的编译阶段处理。
make map
一般在make map时有两种用法make(map[int]int)
、make(map[int]int, len)
第一种方式默认大小为0.,第二种即为指定size
类型检测主要对size进行检测,同时替换操作为OMAKEMAP
make channel
类似于make map,make channel 也可以传入1个或者两个参数。同时将操作改为OMAKECHAN
参考:
https://draveness.me/golang/docs/part1-prerequisite/ch02-compile/golang-typecheck/