亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語言中new()和 make()的區(qū)別詳解

 更新時(shí)間:2014年10月29日 12:02:15   投稿:junjie  
這篇文章主要介紹了Go語言中new()和 make()的區(qū)別詳解,本文講解了new 的主要特性、make 的主要特性,并對(duì)它們的區(qū)別做了總結(jié),需要的朋友可以參考下

概述

Go 語言中的 new 和 make 一直是新手比較容易混淆的東西,咋一看很相似。不過解釋兩者之間的不同也非常容易。

new 的主要特性

首先 new 是內(nèi)建函數(shù),你可以從 http://golang.org/pkg/builtin/#new 這兒看到它,它的定義也很簡(jiǎn)單:

復(fù)制代碼 代碼如下:

func new(Type) *Type

官方文檔對(duì)于它的描述是:

復(fù)制代碼 代碼如下:

內(nèi)建函數(shù) new 用來分配內(nèi)存,它的第一個(gè)參數(shù)是一個(gè)類型,不是一個(gè)值,它的返回值是一個(gè)指向新分配類型零值的指針

根據(jù)這段描述,我們可以自己實(shí)現(xiàn)一個(gè)類似 new 的功能:

復(fù)制代碼 代碼如下:

func newInt() *int {
  var i int
  return &i
}

someInt := newInt()

我們這個(gè)函數(shù)的功能跟 someInt := new(int) 一模一樣。所以在我們自己定義 new 開頭的函數(shù)時(shí),出于約定也應(yīng)該返回類型的指針。

make 的主要特性

make 也是內(nèi)建函數(shù),你可以從 http://golang.org/pkg/builtin/#make 這兒看到它,它的定義比 new 多了一個(gè)參數(shù),返回值也不同:

復(fù)制代碼 代碼如下:

func make(Type, size IntegerType) Type

官方文檔對(duì)于它的描述是:

內(nèi)建函數(shù) make 用來為 slice,map 或 chan 類型分配內(nèi)存和初始化一個(gè)對(duì)象(注意:只能用在這三種類型上),跟 new 類似,第一個(gè)參數(shù)也是一個(gè)類型而不是一個(gè)值,跟 new 不同的是,make 返回類型的引用而不是指針,而返回值也依賴于具體傳入的類型,具體說明如下:

復(fù)制代碼 代碼如下:

Slice: 第二個(gè)參數(shù) size 指定了它的長(zhǎng)度,它的容量和長(zhǎng)度相同。
你可以傳入第三個(gè)參數(shù)來指定不同的容量值,但必須不能比長(zhǎng)度值小。
比如 make([]int, 0, 10)

Map: 根據(jù) size 大小來初始化分配內(nèi)存,不過分配后的 map 長(zhǎng)度為 0,如果 size 被忽略了,那么會(huì)在初始化分配內(nèi)存時(shí)分配一個(gè)小尺寸的內(nèi)存

Channel: 管道緩沖區(qū)依據(jù)緩沖區(qū)容量被初始化。如果容量為 0 或者忽略容量,管道是沒有緩沖區(qū)的

總結(jié)

new 的作用是初始化一個(gè)指向類型的指針(*T),make 的作用是為 slice,map 或 chan 初始化并返回引用(T)。

相關(guān)文章

  • 如何使用工具自動(dòng)監(jiān)測(cè)SSL證書有效期并發(fā)送提醒郵件

    如何使用工具自動(dòng)監(jiān)測(cè)SSL證書有效期并發(fā)送提醒郵件

    本文介紹了如何開發(fā)一個(gè)工具,用于每日檢測(cè)SSL證書剩余有效天數(shù)并通過郵件發(fā)送提醒,工具基于命令行,通過SMTP協(xié)議發(fā)送郵件,需配置SMTP連接信息,本文還提供了配置文件樣例及代碼實(shí)現(xiàn),幫助用戶輕松部署和使用該工具
    2024-10-10
  • Go語言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解

    Go語言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解

    這篇文章主要介紹了Go語言切片前或中間插入項(xiàng)與內(nèi)置copy()函數(shù)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go和RabbitMQ構(gòu)建高效的消息隊(duì)列系統(tǒng)

    Go和RabbitMQ構(gòu)建高效的消息隊(duì)列系統(tǒng)

    本文主要介紹了使用Go語言和RabbitMQ搭建一個(gè)簡(jiǎn)單的消息隊(duì)列系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • GoLang使goroutine停止的五種方法實(shí)例

    GoLang使goroutine停止的五種方法實(shí)例

    goroutine是Go并行設(shè)計(jì)的核心,下面這篇文章主要給大家介紹了關(guān)于GoLang使goroutine停止的五種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Golang實(shí)現(xiàn)AES加密和解密的示例代碼

    Golang實(shí)現(xiàn)AES加密和解密的示例代碼

    AES( advanced encryption standard)使用相同密鑰進(jìn)行加密和解密,也就是對(duì)稱加密。本文將詳細(xì)講解Golang實(shí)現(xiàn)AES加密和解密的方法,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • go語言LeetCode題解944刪列造序示例詳解

    go語言LeetCode題解944刪列造序示例詳解

    這篇文章主要為大家介紹了go語言LeetCode題解944刪列造序示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 深入探究Go語言從反射到元編程的實(shí)踐與探討

    深入探究Go語言從反射到元編程的實(shí)踐與探討

    反射和元編程是一些高級(jí)編程概念,它們使開發(fā)者能夠在運(yùn)行時(shí)檢查、修改并控制程序的行為,了解反射和元編程的工作方式可以幫助我們更好地理解Go,以及如何在需要的時(shí)候高效地使用它們,文章中介紹的非常詳細(xì),感興趣的同學(xué)可以參考下
    2023-05-05
  • Golang字符串常用函數(shù)的使用

    Golang字符串常用函數(shù)的使用

    Golang提供了許多內(nèi)置的字符串函數(shù),這些函數(shù)可在處理字符串?dāng)?shù)據(jù)時(shí)幫助執(zhí)行一些操作,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • golang利用pprof與go-torch如何做性能分析

    golang利用pprof與go-torch如何做性能分析

    這篇文章主要給大家介紹了關(guān)于golang利用pprof與go-torch如何做性能分析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • go語言中fallthrough的用法說明

    go語言中fallthrough的用法說明

    這篇文章主要介紹了go語言中fallthrough的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05

最新評(píng)論