-
1.新品的主要特點。
首先,new 是乙個內建函式,定義非常簡單:
func new(type) *type
內建函式 new 用於分配記憶體,第乙個引數是型別,而不是值,返回值是指向新分配型別的零值的指標。
實現類似 new 的功能:
func newint() int {
var i int
return &i
someint := newint()
該函式的功能與 someint := new(int) 完全相同。 定義以 new 開頭的函式時,還應按約定返回指向該型別的指標。
2.make的主要特點。
make 也是乙個內建函式,它定義了比 new 多乙個引數,返回值不同:
func make(type, size integertype) type
內建函式 make 用於為 slice、map 或 chan 型別分配記憶體並初始化物件(注意:它只能用於這三種型別),類似於 new,第乙個引數也是型別而不是值,與 new 不同,make 返回對型別的引用而不是指標, 並且返回值還取決於傳入的特定型別,如下所述:
slice:第二個引數size指定長度,容量和長度相同。
您可以傳入第三個引數來指定不同的容量值,但該值不得小於長度值。
例如,make(int, 0, 10)。
map:根據大小大小初始化分配的記憶體,但分配的對映長度為0,如果忽略大小,則在初始分配記憶體時會分配小大小的記憶體。
channel:根據緩衝區容量初始化流水線緩衝區。 如果容量為 0 或忽略容量,則管道沒有緩衝區。
3. 總結。 new 的作用是初始化指向型別 (*t) 的指標,make 的作用是初始化並返回切片、對映或 chan 的引用 (t)。
-
new:是乙個內建函式,用於分配記憶體,與C++不同,它不初始化記憶體,而只是將其歸零,相當於,new(x) 將為 x 的新專案分配歸零儲存,並返回其位址,其中第乙個引數是型別,返回值是型別的指標, 並且它的值被初始化為'0',對於不同的資料型別,0值的含義也不同,比如int初始化為0,bool初始化為false等。
make:是 golang 的內建函式,僅用於分配和初始化 slice、map 和 channel 型別的物件,這三種型別都是結構體,返回值是 type 而不是 pointer,例如 slice 是乙個三元描述符,包含指向資料(在陣列中)、length 和 capacity 的指標,在這些專案初始化之前, slice 為 nil,對於這三個,make 初始化這些內部資料結構,並準備好可用的值。
需要注意的是,make 僅用於 map、slice 和 channel,不返回指標,因此如果要獲取顯式指標,請使用 new 進行分配,或顯式使用變數的位址。
-
Make 用於內建型別(對映、切片和通道)的記憶體分配。 new 用於各種型別的記憶體分配。
內建函式 new 的功能本質上與其他語言中的同名函式相同:new(t) 分配 t 型別的記憶體空間,其中填充了零個值,並返回其位址,即 *t 型別的值。 在 go 的術語中,它返回乙個指向新分配的型別 t 的零值的指標。
有一件事非常重要:new 返回指標。
內建函式 make(t, args) 與 new(t) 具有不同的函式,因為 make 只能建立 slice、map 和 channel,並返回具有初始值(非零)而不是 *t 的 t 型別。
從本質上講,這三種型別不同的原因是,必須先初始化對資料結構的引用,然後才能使用它們。 例如,切片是乙個包含三項的描述符,其中包含指向資料(內部陣列)的指標、長度和容量; 在初始化這些項之前,Slice 為 nil。 對於切片、對映和通道,make 初始化內部資料結構並填充相應的值。
make 在初始化後返回乙個(非零)值。
make 是引用型別初始化的方法。
什麼是 Python? Python是一種功能強大的高階程式語言,主要用於科學和工程計算,是一種高效的程式語言,布局簡潔有力,適合新手和專業人士學習。 >>>More
好像你對結構體和結構體指標不太了解,資料陣列是你定義的乙個結構體陣列,它由兩個結體元素組成,每個結構體元素包含兩個成員 x 和 y,第乙個元素是 1 和 10,第二個元素是 2 和 20,你定義的結構指標 p 開始指向陣列資料的第乙個元素, P 指向資料陣列的第二個元素,指標 P 可以操作兩個成員 x 和 y >>>More