Go 语言 -make函数

在 Go 语言中,make 是一个内置函数,专门用于分配和初始化 slice(切片)map(映射)channel(通道) 三种数据类型。
**make 函数不会返回一个指针,而是返回初始化后的数据结构本身的引用**。

make 函数的用途

make 的主要作用是为这些引用类型的数据结构分配内存并进行初始化,而不是像 new 函数那样仅仅分配内存。
make 返回的引用类型可以直接使用,无需进一步初始化。

make 函数的语法

make 函数的基本调用格式如下:

make(type, length, capacity)
  • type:要创建的类型,可以是 slicemapchannel
  • length(可选):数据结构的初始长度,适用于 slicechannel
  • capacity(可选):数据结构的容量,适用于 slice,如果不指定,容量默认等于长度。

make 函数的返回值

make 函数返回的是指定类型的值:

  • slice:返回一个指定长度和容量的切片。
  • map:返回一个初始化后的映射。
  • channel:返回一个带有指定容量的通道(若不指定容量则为无缓冲通道)。

每种类型的 make 返回值都是对应类型的引用,因此可以直接使用。

示例

1. 使用 make 创建切片

s := make([]int, 5, 10) // 创建一个长度为 5,容量为 10 的切片
fmt.Println(len(s), cap(s)) // 输出:5 10
  • make([]int, 5, 10) 创建了一个长度为 5,容量为 10 的切片。
  • 返回值 s 是一个初始化后的切片,带有 5 个默认值为 0 的 int 元素。

2. 使用 make 创建映射

m := make(map[string]int) // 创建一个空的 map
m["key"] = 42
fmt.Println(m["key"]) // 输出:42
  • make(map[string]int) 创建了一个空的 map,可以直接插入键值对。
  • 返回值 m 是一个空的映射,可以直接用来存储键值对。

3. 使用 make 创建通道

ch := make(chan int, 2) // 创建一个容量为 2 的缓冲通道
ch <- 1
ch <- 2
fmt.Println(<-ch) // 输出:1
fmt.Println(<-ch) // 输出:2
  • make(chan int, 2) 创建了一个容量为 2 的缓冲通道,可以存放两个 int 值。
  • 返回值 ch 是一个通道,允许在 Goroutine 间进行数据通信。

总结

  • make 函数用于分配和初始化三种引用类型:slicemapchannel
  • make 函数返回一个初始化后的值,而不是指针,可以直接使用
posted @ 2024-10-31 14:43  牛马chen  阅读(161)  评论(0编辑  收藏  举报