欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解golang中make與new的異同點(diǎn)和用法

 更新時(shí)間:2024年01月18日 09:45:42   作者:莫忘初心丶  
這篇文章將給大家介紹了go語言中函數(shù)new與make的使用和區(qū)別,關(guān)于go語言中new和make是內(nèi)建的兩個(gè)函數(shù),主要用來創(chuàng)建分配類型內(nèi)存,文中通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下

make介紹

在Go語言中,make 是一個(gè)用于創(chuàng)建切片、映射(map)和通道(channel)等引用類型的內(nèi)置函數(shù)。make 的主要作用是為這些引用類型分配內(nèi)存并進(jìn)行初始化。

用法:

1. 創(chuàng)建切片(slice):

slice := make([]int, 5) // 創(chuàng)建一個(gè)包含5個(gè)整數(shù)的切片

make 接受兩個(gè)參數(shù),第一個(gè)是類型,第二個(gè)是長度。對(duì)于切片,還可以提供一個(gè)可選的容量參數(shù):

slice := make([]int, 5, 10) // 創(chuàng)建一個(gè)長度為5,容量為10的切片

2. 創(chuàng)建映射(map):

myMap := make(map[string]int) // 創(chuàng)建一個(gè)字符串到整數(shù)的映射

3. 創(chuàng)建通道(channel):

ch := make(chan int) // 創(chuàng)建一個(gè)整數(shù)類型的通道

注意事項(xiàng):

  1. make 只能用于引用類型的數(shù)據(jù)結(jié)構(gòu),不能用于值類型(例如結(jié)構(gòu)體)的創(chuàng)建。
  2. make 返回被初始化的引用類型實(shí)例,而不是指針。
  3. 對(duì)于切片和映射,make 除了分配內(nèi)存,還會(huì)初始化內(nèi)部的數(shù)據(jù)結(jié)構(gòu),確保它們可以被直接使用。
  4. 對(duì)于通道,make 會(huì)創(chuàng)建并返回一個(gè)未被緩沖的通道。

總體而言,make 主要用于創(chuàng)建引用類型并進(jìn)行初始化,以確保它們可以被正確地使用。

new介紹

在Go語言中,new 是一個(gè)用于為值類型分配內(nèi)存并返回指向新分配的零值實(shí)例的指針的內(nèi)置函數(shù)。new 主要用于創(chuàng)建值類型的實(shí)例,例如結(jié)構(gòu)體。以下是 new 的基本用法和注意事項(xiàng):

用法:

1. 創(chuàng)建值類型實(shí)例:

ptr := new(int) // 創(chuàng)建一個(gè)整數(shù)類型的指針,指向新分配的零值整數(shù)

2. 創(chuàng)建結(jié)構(gòu)體實(shí)例:

type MyStruct struct {
    Field1 int
    Field2 string
}

instance := new(MyStruct) // 創(chuàng)建一個(gè) MyStruct 類型的指針,指向新分配的零值結(jié)構(gòu)體

注意事項(xiàng):

  1. new 返回一個(gè)指向新分配內(nèi)存的零值實(shí)例的指針。
  2. 對(duì)于值類型,new 分配的內(nèi)存會(huì)被初始化為零值。
  3. new 接受一個(gè)參數(shù),即要分配內(nèi)存的類型,并返回一個(gè)指向該類型的零值的指針。
  4. new 不適用于引用類型(如切片、映射和通道),只能用于值類型的創(chuàng)建。
  5. new 分配的內(nèi)存不會(huì)被清理,需要程序員負(fù)責(zé)釋放。

總體而言,new 主要用于為值類型分配內(nèi)存,并返回一個(gè)指向新分配的零值實(shí)例的指針。在實(shí)際使用時(shí),根據(jù)需要選擇使用 new 還是直接聲明和初始化。

make與new的異同

make 和 new 都是用于在Go語言中進(jìn)行內(nèi)存分配的內(nèi)置函數(shù),但它們的用途和行為有一些關(guān)鍵的區(qū)別。

相同點(diǎn):

  • 內(nèi)存分配: 兩者都用于在堆上分配內(nèi)存。

不同點(diǎn):

1. 適用類型:

  • make make: 只用于slice、map以及channel的初始化。
slice := make([]int, 5)
  • new 用于創(chuàng)建值類型的實(shí)例,例如結(jié)構(gòu)體。返回一個(gè)指向新分配的零值實(shí)例的指針。
ptr := new(int)

2. 返回類型:

  • make 返回被初始化的引用類型實(shí)例,而不是指針。

  • new 返回一個(gè)指向新分配的零值實(shí)例的指針。

3. 參數(shù):

  • make 接受類型和長度等參數(shù),用于初始化引用類型的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。
slice := make([]int, 5)
  • new 只接受類型參數(shù),返回一個(gè)指向該類型的零值的指針。
ptr := new(int)

4. 初始化:

  • make 除了分配內(nèi)存,還會(huì)初始化引用類型的內(nèi)部數(shù)據(jù)結(jié)構(gòu)。

  • new 分配的內(nèi)存會(huì)被初始化為零值。

總結(jié):

  • 使用 make 主要用于初始化引用類型,確保它們可以被直接使用。
  • 使用 new 主要用于為值類型分配內(nèi)存,返回一個(gè)指向新分配的零值實(shí)例的指針。

選擇使用 make 還是 new 取決于您要?jiǎng)?chuàng)建的數(shù)據(jù)結(jié)構(gòu)的類型和初始化需求。

以上就是詳解golang中make與new的異同點(diǎn)和用法的詳細(xì)內(nèi)容,更多關(guān)于golang make與new異同和用法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用go寫的五子棋預(yù)測(cè)算法的實(shí)現(xiàn)

    用go寫的五子棋預(yù)測(cè)算法的實(shí)現(xiàn)

    這篇文章主要介紹了用go寫的五子棋預(yù)測(cè)算法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 為什么不建議在go項(xiàng)目中使用init()

    為什么不建議在go項(xiàng)目中使用init()

    這篇文章主要介紹了為什么不建議在go項(xiàng)目中使用init(),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • 一文帶你深入理解Golang中的泛型

    一文帶你深入理解Golang中的泛型

    Go?在泛型方面一直被詬病,因?yàn)樗谶@方面相對(duì)比較落后。但是,在?Go?1.18?版本中,泛型已經(jīng)被正式引入,成為了?Go?語言中一個(gè)重要的特性。本文將會(huì)詳細(xì)介紹?Go?泛型的相關(guān)概念,語法和用法,希望能夠幫助大家更好地理解和應(yīng)用這一特性
    2023-05-05
  • Go Java算法之單詞規(guī)律示例詳解

    Go Java算法之單詞規(guī)律示例詳解

    這篇文章主要為大家介紹了Go Java算法之單詞規(guī)律示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang學(xué)習(xí)筆記(三):控制流

    Golang學(xué)習(xí)筆記(三):控制流

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(三):控制流,本文講解了IF、FOR、SWITCH、goto、break、continue等控制流語句的使用實(shí)例,需要的朋友可以參考下
    2015-05-05
  • Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解

    Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解

    這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫

    Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫

    這篇文章主要介紹了Golang使用CGO與Plugin技術(shù)運(yùn)行加載C動(dòng)態(tài)庫,Golang?程序在運(yùn)行時(shí)加載C動(dòng)態(tài)庫的技術(shù),跳過了Golang項(xiàng)目編譯階段需要鏈接C動(dòng)態(tài)庫的過程,提高了Golang項(xiàng)目開發(fā)部署的靈活性
    2022-07-07
  • go貨幣計(jì)算時(shí)如何避免浮點(diǎn)數(shù)精度問題

    go貨幣計(jì)算時(shí)如何避免浮點(diǎn)數(shù)精度問題

    在開發(fā)的初始階段,我們經(jīng)常會(huì)遇到“浮點(diǎn)數(shù)精度”和“貨幣值表示”的問題,那么在golang中如何避免這一方面的問題呢,下面就跟隨小編一起來學(xué)習(xí)一下吧
    2024-02-02
  • Go引用github包的詳細(xì)流程步驟

    Go引用github包的詳細(xì)流程步驟

    這篇文章主要給大家介紹了關(guān)于Go引用github包的詳細(xì)流程步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Go具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Golang文件讀寫操作詳情

    Golang文件讀寫操作詳情

    這篇文章主要介紹了Golang文件讀寫操作詳情,文件是數(shù)據(jù)源(保存數(shù)據(jù)的地方)的一種,文件最主要的作用就是保存數(shù)據(jù),文件在程序中是以流的形式來操作的,更多詳細(xì)內(nèi)容需要的朋友可以參考一下
    2022-07-07

最新評(píng)論