Go语言中 make 的作用是什么?

发布于 1周前 作者 sinazl 最后一次编辑是 5天前 来自 问答

Go语言中 make 的作用是什么?

make 的作用是为 slice, map or chan 的初始化 然后返回引用 make 函数是内 建函数,函数定义:

func make(Type, size IntegerType) Type

make(T, args)函数的目的和 new(T)不同 仅仅用于创建 slice, map, channel 而且返回类型是实例

1 回复

在Go语言中,make 函数是一个内建函数,其主要作用是为 slice(切片)、map(映射)以及 channel(通道)这三种复合类型分配内存并初始化它们。对于这三种类型,make 函数是必需的,因为它们内部包含指向底层数组的指针,需要通过 make 来分配并初始化这些底层结构。

示例

1. 为 Slice 分配内存

// 创建一个长度为5,容量为10的int类型切片
s := make([]int, 5, 10)
fmt.Println(s) // 输出: [0 0 0 0 0]
fmt.Println(len(s)) // 输出: 5
fmt.Println(cap(s)) // 输出: 10

2. 为 Map 分配内存

// 创建一个空的map,键和值类型分别为string和int
m := make(map[string]int)
m["key"] = 1
fmt.Println(m) // 输出可能是: map[key:1]

注意:对于map,make 只是分配了内存,并没有初始化键值对,所以初始的map是空的。

3. 为 Channel 分配内存

// 创建一个传递int类型的无缓冲通道
ch := make(chan int)

// 使用goroutine发送数据到通道
go func() {
    ch <- 1
}()

// 从通道接收数据
value := <-ch
fmt.Println(value) // 输出: 1

对于Channel,make 函数创建了一个通道,并可以选择性地设置缓冲区的容量。如果未指定容量,则通道是无缓冲的,意味着发送操作将阻塞,直到有接收操作准备好接收数据。

总结

make 函数是Go语言中用于初始化slice、map、channel这三种复合类型的内建函数。它为这些类型分配内存,并可选地初始化其长度(对于slice)或容量(对于slice和channel),但不直接初始化map的键值对。这些操作对于在Go中安全且有效地使用这些类型至关重要。

回到顶部