Go 中 new 和 make 的區別詳細說明

發布 科技 2024-08-07
3個回答
  1. 匿名使用者2024-02-15

    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)。

  2. 匿名使用者2024-02-14

    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 進行分配,或顯式使用變數的位址。

  3. 匿名使用者2024-02-13

    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 是引用型別初始化的方法。

相關回答
8個回答2024-08-07

什麼是 Python? Python是一種功能強大的高階程式語言,主要用於科學和工程計算,是一種高效的程式語言,布局簡潔有力,適合新手和專業人士學習。 >>>More

11個回答2024-08-07

C 語言的有效變數名稱:

首先,它只能包含數字、字母和下劃線。 >>>More

21個回答2024-08-07

第三代Vios最能充分詮釋敏銳外觀的特點,正是因為它的機身是三者中最緊緻的,能在裡面積攢動感動能

6個回答2024-08-07

好像你對結構體和結構體指標不太了解,資料陣列是你定義的乙個結構體陣列,它由兩個結體元素組成,每個結構體元素包含兩個成員 x 和 y,第乙個元素是 1 和 10,第二個元素是 2 和 20,你定義的結構指標 p 開始指向陣列資料的第乙個元素, P 指向資料陣列的第二個元素,指標 P 可以操作兩個成員 x 和 y >>>More

17個回答2024-08-07

include 設定插入點。

包括字元處理。 >>>More