在 Go 語言中,make
是一個內建函式,專門用於分配和初始化 slice(切片)、map(對映) 和 channel(通道) 三種資料型別。
**make
函式不會返回一個指標,而是返回初始化後的資料結構本身的引用**。
make
函式的用途
make
的主要作用是為這些引用型別的資料結構分配記憶體並進行初始化,而不是像 new
函式那樣僅僅分配記憶體。
make
返回的引用型別可以直接使用,無需進一步初始化。
make
函式的語法
make
函式的基本呼叫格式如下:
make(type, length, capacity)
- type:要建立的型別,可以是
slice
、map
或channel
。 - length(可選):資料結構的初始長度,適用於
slice
和channel
。 - 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
函式用於分配和初始化三種引用型別:slice
、map
和channel
。make
函式返回一個初始化後的值,而不是指標,可以直接使用