golang make
时间: 2023-10-03 15:08:06 浏览: 106
在Go语言中,make和new是两个用于创建变量的内置函数,它们的作用是不同的。
make函数用于创建slice、map和channel类型的变量,并且返回初始化后的变量。make函数的语法是:make(T, args),其中T表示要创建的变量的类型,args表示传递给T类型的参数。
new函数用于创建指定类型的变量,并返回该变量的指针。new函数的语法是:new(T),其中T表示要创建的变量的类型。
简单来说,make函数适用于创建slice、map和channel类型的变量,而new函数适用于创建其他类型的变量。
相关问题
golang make 结构
在 Go 语言中,make 可以用来创建一些特定的内置类型,如 slice、map 和 channel。make 的语法如下:
```go
make(T Type, size ...IntegerType) Type
```
其中,T 表示要创建的类型,size 则是类型 T 所需的参数,它们的具体含义根据 T 的不同而有所不同。
对于 slice,size 表示 slice 的长度,可以省略,此时默认值为 0。例如:
```go
// 创建一个长度为 10 的 int 类型 slice
a := make([]int, 10)
```
对于 map,size 表示 map 中初始容量的大小,可以省略,此时默认值为 0。例如:
```go
// 创建一个初始容量为 10 的 string 到 int 的映射
m := make(map[string]int, 10)
```
对于 channel,size 表示 channel 的缓冲区大小,如果省略则表示创建一个无缓冲的 channel。例如:
```go
// 创建一个无缓冲的 string 类型 channel
ch := make(chan string)
```
需要注意的是,使用 make 创建的这些类型都是引用类型,它们在底层都使用了指针,因此使用 make 创建的变量在传递时是按引用传递的。
golang make分配内存
在Go语言中,`make` 函数主要用于为内置类型(如切片、映射和通道)分配内存和初始化它们。和 C 或其他语言中的直接内存分配方式不同,`make` 分配的内存会进行初始化,使得内置类型的零值更加有意义。下面是 `make` 在不同类型上使用的一些细节:
1. 切片:使用 `make` 创建切片时,可以指定切片的长度和容量。如果只提供了长度,那么容量也会被设置为和长度相同。
```go
s := make([]int, 10) // 长度为10,容量也是10
s := make([]int, 10, 15) // 长度为10,容量为15
```
2. 映射:使用 `make` 创建映射时,可以为映射分配初始容量,但这不是必须的。即使不指定容量,映射也可以动态地增长。
```go
m := make(map[string]int) // 创建一个空映射
m := make(map[string]int, 10) // 创建一个预分配空间的空映射
```
3. 通道:使用 `make` 创建通道时,可以指定通道的缓冲大小。如果缓冲大小为零,则创建的是无缓冲通道。
```go
ch := make(chan int) // 创建一个无缓冲的通道
ch := make(chan int, 10) // 创建一个缓冲大小为10的通道
```
使用 `make` 函数分配的内存可以通过 `delete` 或者 `close` 函数进行资源释放,例如,关闭通道、清空映射等。
阅读全文