Golang中make的使用


內建函數 make 用來為 slice,map 或 chan 類型分配內存和初始化一個對象(注意:只能用在這三種類型上),跟 new 類似,第一個參數也是一個類型而不是一個值,跟 new 不同的是,make 返回類型的引用而不是指針,而返回值也依賴於具體傳入的類型

make()函數在golang的代碼如下:

func make(t Type,size IntegerType) Type

1
使用make來創建slice,map,chanel說明如下:

slice:
var slice_ []int = make([]int,5,10)
fmt.Println(slice_)

var slice_1 []int = make([]int,5)
fmt.Println(slice_1)

var slice_2 []int = []int{1,2}
fmt.Println(slice_2)

打印結果:

[0 0 0 0 0]
[0 0 0 0 0]
[1,2]
1
2
3
4
5
6
7
8
9
10
11
12
13

在創建slice時第一個參數用於確定初始化該slice的大小該slice中的值為零值,第三個參數用於確定該slice的長度

如果我們創建該slice時就能確定該slice最多只會裝多大的數據量時就可以使用第三個參數固定該slice的長度,這樣做的就會免去如果slice的數據超出內部所指向的array的最大長度時對array數據的轉移,可以提高效率

map:
var m_ map[string]int = make(map[string]int)
m_["one"] = 1
fmt.Println(m_)

var m map[string]int = map[string]int{"1":1}
m["2"] = 2
fmt.Println(m)

打印結果:

map[one:1]
map[1:1 2:2]
1
2
3
4
5
6
7
8
9
10
11

根據 size 大小來初始化分配內存,不過分配后的 map 長度為 0,如果 size 被忽略了,那么會在初始化分配內存時分配一個小尺寸的內存

chanel:
管道緩沖區依據緩沖區容量被初始化。如h果容量為 0 或者忽略容量,管道是沒有緩沖區的

make函數,該函數第一個參數是類型,第二個參數是分配的空間,第三個參數是預留分配空間,例如a:=make([]int, 5, 10), len(a)輸出結果是5,cap(a)輸出結果是10,然后我對a[4]進行賦值發現是可以得,但對a[5]進行賦值發現報錯了,於是郁悶這個預留分配的空間要怎么使用呢,於是google了一下發現原來預留的空間需要重新切片才可以使用,代碼如下。

package main

import "fmt"

func main(){
	a := make([]int, 10, 20)
	fmt.Printf("%d, %d\n", len(a), cap(a))
	fmt.Println(a)
	b := a[:cap(a)]
	fmt.Println(b)
}

參考:
https://blog.csdn.net/happinessaflower/article/details/44659651
https://studygolang.com/articles/10751


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM