Go語言中內(nèi)建函數(shù)make的使用
在 Go 語言中,make 是一個非常強大的內(nèi)建函數(shù),用于創(chuàng)建和初始化特定類型的數(shù)據(jù)結(jié)構(gòu),包括切片(slice)、映射(map)和通道(channel)。掌握 make 的使用方法,可以幫助我們更高效地管理內(nèi)存和數(shù)據(jù)結(jié)構(gòu)。本文將詳細(xì)介紹 make 函數(shù)的使用場景和示例。
make 函數(shù)的基本語法
make 函數(shù)的基本語法如下:
make(type, size, [capacity])
- type:指定要創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)類型,可以是切片、映射或通道。
- size:指定初始長度(對于切片)或初始大小(對于通道)。
- capacity(可選):僅適用于切片,指定其容量。
創(chuàng)建切片
使用 make 函數(shù)創(chuàng)建切片時,可以指定切片的初始長度和容量。如果未指定容量,默認(rèn)與長度相同。
package main import "fmt" func main() { // 創(chuàng)建長度為 5 的切片 slice1 := make([]int, 5) fmt.Println("slice1:", slice1) // 輸出:slice1: [0 0 0 0 0] // 創(chuàng)建長度為 5,容量為 10 的切片 slice2 := make([]int, 5, 10) fmt.Println("slice2:", slice2) // 輸出:slice2: [0 0 0 0 0] fmt.Println("slice2 容量:", cap(slice2)) // 輸出:slice2 容量: 10 }
創(chuàng)建映射
使用 make 函數(shù)創(chuàng)建映射時,只需要指定映射的類型。映射會自動調(diào)整大小,因此不需要指定初始容量,但可以提供一個初始容量以提高性能。
package main import "fmt" func main() { // 創(chuàng)建一個映射 m := make(map[string]int) m["a"] = 1 m["b"] = 2 fmt.Println("map:", m) // 輸出:map: map[a:1 b:2] // 創(chuàng)建一個初始容量為 10 的映射 m2 := make(map[string]int, 10) fmt.Println("map2:", m2) // 輸出:map2: map[] }
創(chuàng)建通道
使用 make 函數(shù)創(chuàng)建通道時,需要指定通道的類型和緩沖區(qū)大小。如果緩沖區(qū)大小為 0,則創(chuàng)建的是無緩沖通道。
package main import "fmt" func main() { // 創(chuàng)建一個無緩沖通道 ch1 := make(chan int) go func() { ch1 <- 1 }() fmt.Println("ch1:", <-ch1) // 輸出:ch1: 1 // 創(chuàng)建一個帶緩沖區(qū)大小為 5 的通道 ch2 := make(chan int, 5) ch2 <- 1 ch2 <- 2 fmt.Println("ch2 容量:", cap(ch2)) // 輸出:ch2 容量: 5 fmt.Println("ch2 長度:", len(ch2)) // 輸出:ch2 長度: 2 }
使用 make 函數(shù)的注意事項
- 與 new 區(qū)別:make 函數(shù)只用于創(chuàng)建切片、映射和通道,并且返回的是初始化后的數(shù)據(jù)結(jié)構(gòu);而 new 函數(shù)用于分配內(nèi)存,并返回指向零值的指針。
- 初始容量:為切片或映射指定初始容量可以提高性能,特別是在預(yù)期會存儲大量數(shù)據(jù)的情況下。
- 無緩沖與緩沖通道:無緩沖通道用于同步,而帶緩沖區(qū)的通道則允許異步操作。根據(jù)需求選擇合適的通道類型。
示例代碼
以下是一個綜合示例,展示了如何使用 make 函數(shù)創(chuàng)建切片、映射和通道:
package main import "fmt" func main() { // 創(chuàng)建切片 slice := make([]int, 5, 10) fmt.Println("切片:", slice) // 輸出:切片: [0 0 0 0 0] fmt.Println("切片容量:", cap(slice)) // 輸出:切片容量: 10 // 創(chuàng)建映射 m := make(map[string]int) m["a"] = 1 m["b"] = 2 fmt.Println("映射:", m) // 輸出:映射: map[a:1 b:2] // 創(chuàng)建通道 ch := make(chan int, 5) ch <- 1 ch <- 2 fmt.Println("通道容量:", cap(ch)) // 輸出:通道容量: 5 fmt.Println("通道長度:", len(ch)) // 輸出:通道長度: 2 }
總結(jié)
make 是 Go 語言中的一個關(guān)鍵函數(shù),它幫助我們高效地創(chuàng)建和初始化切片、映射和通道。理解和正確使用 make 函數(shù),可以顯著提高代碼的性能和可維護性。希望這篇博客能幫助你更好地理解和使用 Go 語言中的 make 函數(shù),讓你的編程之旅更加順暢。
到此這篇關(guān)于Go語言中內(nèi)建函數(shù)make的使用的文章就介紹到這了,更多相關(guān)Go 內(nèi)建函數(shù)make內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang 數(shù)組去重,利用map的實現(xiàn)
這篇文章主要介紹了golang 數(shù)組去重,利用map的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04利用go-kit組件進行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作
這篇文章主要介紹了利用go-kit組件進行服務(wù)注冊與發(fā)現(xiàn)和健康檢查的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04Golang源碼分析之golang/sync之singleflight
golang/sync庫拓展了官方自帶的sync庫,提供了errgroup、semaphore、singleflight及syncmap四個包,本次先分析第一個包errgroup的源代碼,下面這篇文章主要給大家介紹了關(guān)于Golang源碼分析之golang/sync之singleflight的相關(guān)資料,需要的朋友可以參考下2022-11-11