在Go语言中,make
函数用于初始化内建的数据类型(如切片、映射和通道),分配内存并返回初始化的实例。
以下是make
的一些基本用法:
1. 初始化切片(Slice):
make
可以用来创建一个切片,同时指定其长度和容量。
// make([]Type, length, capacity)
s := make([]int, 0, 10) // 创建一个整型切片,长度为0,容量为10
如果容量被省略,则容量被设置为与长度相等。
代码语言:javascript复制s := make([]int, 10) // 创建一个整型切片,长度和容量都是10
2. 初始化映射(Map):
make
可以用来创建一个映射,并允许指定初始容量。
// make(map[KeyType]ValueType, initialCapacity)
m := make(map[string]int, 10) // 创建一个字符串到整型的映射,容量是10
映射的容量是可选的,如果省略,则按默认方式初始化。
代码语言:javascript复制m := make(map[string]int) // 创建一个字符串到整型的映射,默认容量
3. 初始化通道(Channel):
make
也用于创建通道,并指定通道的缓冲大小。
// make(chan Type, bufferCapacity)
c := make(chan int, 5) // 创建一个整型通道,缓冲容量为5
如果缓冲大小为0或被省略,通道是无缓冲的。
代码语言:javascript复制c := make(chan int) // 创建一个无缓冲的整型通道
一个被make
创建的通道是双向的,但是,你也可以使用类型转换让其变为单向。
这是make
的基本用法,但需要注意的是make
只适用于切片、映射和通道这三种类型,而其他如整型、字符串等类型,创建时不需要make
函数,可以直接声明或使用new
函数来创建。例如:
var x int // 声明一个整型变量x
str := new(string) // 使用new来创建一个字符串指针
记住,make
返回的是类型的实例(已初始化),而new
返回的是指向该类型的指针(内存零值)。