Golang的make與new的區別

2021-09-07 04:12:04 字數 549 閱讀 1969

make用於內建型別(map、slice 和channel)的記憶體分配。

new用於各種型別的記憶體分配。

new的函式宣告:

func new(type) *type
接受乙個引數,這個引數是乙個型別,分配好記憶體後,返回乙個指向該型別記憶體位址的指標。它同時把分配的記憶體置為零,也就是型別的零值。

make的函式宣告:

func make(t type, size ...integertype) type
返回的是該型別本身,並且make初始化了內部的資料結構,填充適當的值。make返回初始化後的(非零)值。

比如slice是個系統定義的結構,有三個字段:乙個指標指到資料儲存區,長度,儲存區容量。只有三個欄位都是零值的時候,這個變數才是零值

比如 make(int, 0, 0) 建立的slice長度和容量都是0,但是指標不為空,所以不是零值。而且也沒有辦法直接設定slice所指向的指標,所以make出來的都不是零值

golang的記憶體模型與new 與make

要徹底理解new 與make 的區別,最好從記憶體模型入手.golang屬於c family,而c程式在unix的內在模型 低位址 text data bss heap unused stack env 高位址 其中 1 text儲存程式主體,即機器指令.2 data,bss儲存全域性變數,data...

Golang中make與new有何區別?

一 前言 本文主要給大家介紹了go語言中函式new與make的使用和區別,關於go語言中new和make是內建的兩個函式,主要用來建立分配型別記憶體。在我們定義生成變數的時候,可能會覺得有點迷惑,其實他們的規則很簡單,下面我們就通過一些示例說明他們的區別和使用。二 變數的宣告 var i int v...

golang中new和make區別

golang 中有兩個記憶體分配機制 new和make,二者有明顯區別 make 返回乙個初始化的例項,返回的是乙個例項,而不是指標,其只能用來初始化 slice,map和channel三種型別 package main import fmt func main 通過這個例子可以看出,當對slice...