go中make用法及常見的一些坑
make用法和參數(shù)用法
golang分配內(nèi)存有一個make函數(shù),該函數(shù)第一個數(shù)類型,第二個參數(shù)的分配的空間,第三個
參數(shù)時預(yù)留分配空間,前兩個參數(shù)很好理解,但對第三個參數(shù)不是很理解,
例如a:=make([]int,5,10),len(a)輸出結(jié)果為5,cap(a) 輸出結(jié)果為10 ,對a[4]可以正常賦值,但是對a[5]進(jìn)行賦值就會發(fā)現(xiàn)報錯
package main
import "fmt"
func main(){
a := make([]int, 5, 10)
fmt.Println("len(a):", len(a))
fmt.Println("cap(a):", cap(a))
fmt.Println(a)
b := a[:cap(a)]
fmt.Println(b)
}使用make常見的一些坑
1:slice使用make
slice在make了之后,設(shè)置了slice的大小之后。實際上是在slice里面添加了len個數(shù)據(jù),
如果在使用append來操作的話,相當(dāng)于在slice后面添加新的元素,
arr := make([]int, 10)
fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)
arr = append(arr, 1)
fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)
arr = make([]int, 10, 20)
fmt.Println("len=", len(arr), "cap=", cap(arr), "arr", arr)輸出結(jié)果

2:map使用map:
注意:map在使用make的時候,就算指定了len,也是不起作用的,這個len起不到限制的作用。如:
temp := make(map[string]int)
fmt.Println("len(temp):", len(temp), "temp:", temp)
temp1 := make(map[string]int, 3)
fmt.Println("len(temp1):", len(temp1), "temp1", temp1)輸出結(jié)果

下面的例子闡述了new和make的區(qū)別
var p *[]int = new([]int) ? ? ? // 分配切片數(shù)據(jù)結(jié)構(gòu); *p == nil; 幾乎沒有作用 var v ?[]int = make([]int, 100) // 切片v引用一個[100]int的數(shù)組 // 沒有必要: var p *[]int = new([]int) *p = make([]int, 100, 100) // 慣用做法: v := make([]int, 100)
記住,make只應(yīng)用于映射、切片和信道,并且不會返回指針。如果想獲得一個顯式的指針,使用new分配空間或者直接獲取變量的地址。
總結(jié)
到此這篇關(guān)于go中make用法及常見的一些坑的文章就介紹到這了,更多相關(guān)go的make用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文深入探索Go語言中的循環(huán)結(jié)構(gòu)
在編程中,循環(huán)結(jié)構(gòu)扮演著重要的角色,它使我們能夠有效地重復(fù)執(zhí)行特定的代碼塊,以實現(xiàn)各種任務(wù)和邏輯,在Go語言中,for 是 Go 中唯一的循環(huán)結(jié)構(gòu),本文將深入探討Go語言中的for循環(huán)類型以及它們的用法2023-08-08
Go?實戰(zhàn)單隊列到優(yōu)先級隊列實現(xiàn)圖文示例
這篇文章主要為大家介紹了Go?實戰(zhàn)單隊列到優(yōu)先級隊列圖文示例實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
并發(fā)安全本地化存儲go-cache讀寫鎖實現(xiàn)多協(xié)程并發(fā)訪問
這篇文章主要介紹了并發(fā)安全本地化存儲go-cache讀寫鎖實現(xiàn)多協(xié)程并發(fā)訪問,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
golang監(jiān)聽ip數(shù)據(jù)包的實現(xiàn)步驟(golang純享版)
這篇文章主要給大家介紹了golang監(jiān)聽ip數(shù)據(jù)包的實現(xiàn)步驟,本文以ip4 作為案例進(jìn)行包抓取示范,ip6抓取與ip4方式異曲同工,可自行舉一反三得出,文中通過圖文結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
Go并發(fā)編程實現(xiàn)數(shù)據(jù)競爭
本文主要介紹了Go并發(fā)編程實現(xiàn)數(shù)據(jù)競爭,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09
Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系解析
這篇文章主要為大家介紹了Go語言rune與字符串轉(zhuǎn)換的密切關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
提升Go語言開發(fā)效率的小技巧實例(GO語言語法糖)匯總
這篇文章主要介紹了提升Go語言開發(fā)效率的小技巧匯總,也就是Go語言的語法糖,掌握好這些可以提高我們的開發(fā)效率,需要的朋友可以參考下2022-11-11
Windows上安裝Go并配置環(huán)境變量(圖文步驟)
開始使用Go創(chuàng)建應(yīng)用程序之前,需要設(shè)置開發(fā)環(huán)境,本文主要介紹了Windows上安裝Go并配置環(huán)境變量,具有一定的參考價值,感興趣的可以了解一下2023-08-08

