GO語言make()分配用法實例
本文實例講述了GO語言make()分配用法。分享給大家供大家參考。具體分析如下:
make()分配:內(nèi)部函數(shù) make(T, args) 的服務(wù)目的和 new(T) 不同。
它只生成切片,映射和程道,并返回一個初始化的(不是零)的,type T的,不是 *T 的值。
這種區(qū)分的原因是,這三種類型的數(shù)據(jù)結(jié)構(gòu)必須在使用前初始化.
比如切片是一個三項的描述符,包含數(shù)據(jù)指針(數(shù)組內(nèi)),長度,和容量;在這些項初始化前,切片為 nil 。
對于切片、映射和程道,make初始化內(nèi)部數(shù)據(jù)結(jié)構(gòu),并準備要用的值。
記住 make() 只用于映射、切片和程道,不返回指針。要明確的得到指針用 new() 分配
import "fmt"
func main() {
//分配片結(jié)構(gòu);* p==零
var p *[]int = new([]int)
*p = make([]int, 100, 100) //這樣寫有點復雜,很容易就搞亂了
fmt.Println(p)
//現(xiàn)在將V分配一個新的數(shù)組,100個整型
//寫法一
//var v []int = make([]int, 100)
//寫法二:非常常用的寫法,簡節(jié)明了
v := make([]int, 100)
fmt.Println(v)
}
通過make()還可以靈活地創(chuàng)建數(shù)組切片。如
//創(chuàng)建切片也使用make函數(shù),它被分配一個零數(shù)組和指向這個數(shù)組的切片。
//創(chuàng)建一個初始元素個數(shù)為5的數(shù)組切片,元素初始值為0
a := make([]int, 5) // len(a)=5
//切片有長度和容量。切片的最大長度就是它的容量。
//指定一個切片的容量,通過第三個參數(shù)。
//創(chuàng)建一個初始元素個數(shù)為5的數(shù)組切片,元素初始值為0,并預留10個元素的存儲空間
b := make([]int, 5, 10) // len(b)=5, cap(b)=10
//通過重新切片,可使切片增加。
b = b[:cap(b)] // len(b)=5, cap(b)=5
b = b[1:] // len(b)=4, cap(b)=4
//直接創(chuàng)建并初始化包含5個元素的數(shù)組切片
c := []int{1,2,3,4,5}
希望本文所述對大家的Go語言程序設(shè)計有所幫助。
相關(guān)文章
gorm+gin實現(xiàn)restful分頁接口的實踐
本文主要介紹了gorm+gin實現(xiàn)restful分頁接口的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
一文帶你理解Golang中的Time結(jié)構(gòu)
根據(jù)golang的time包的文檔可以知道,golang的time結(jié)構(gòu)中存儲了兩種時鐘,一種是Wall?Clocks,一種是Monotonic?Clocks,下面我們就來簡單了解一下這兩種結(jié)構(gòu)吧2023-09-09
Go實現(xiàn)完全靜態(tài)編譯和交叉編譯的示例代碼
Go 語言天生支持跨平臺編譯,并且其標準庫幾乎不依賴系統(tǒng)動態(tài)庫,所以在大多數(shù)場景下,它編譯出來的二進制文件幾乎可以直接丟到任何機器運行,但實際開發(fā)中,我們經(jīng)常遇到兩個問題,如何完全靜態(tài)編譯和交叉編譯,本文詳細的給大家介紹了解決方法,需要的朋友可以參考下2025-07-07
Golang Map value不可尋址使用指針類型代替示例詳解
這篇文章主要為大家介紹了Golang Map value不可尋址使用指針類型代替示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11

