Go 語言 -make函式

牛马chen發表於2024-10-31

在 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 函式返回一個初始化後的值,而不是指標,可以直接使用

相關文章