佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Go語(yǔ)言中new()和 make()的區(qū)別詳解

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

熱門(mén)標(biāo)簽:地方門(mén)戶(hù)網(wǎng)站 百度競(jìng)價(jià)排名 服務(wù)外包 網(wǎng)站排名優(yōu)化 AI電銷(xiāo) Linux服務(wù)器 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求

概述

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

new 的主要特性

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

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

func new(Type) *Type

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

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

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

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

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

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

someInt := newInt()

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

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

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

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

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

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

總結(jié)

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

您可能感興趣的文章:
  • golang中make和new的區(qū)別示例詳解
  • Go語(yǔ)言里的new函數(shù)用法分析
  • GO語(yǔ)言make()分配用法實(shí)例
  • 深入講解Go語(yǔ)言中函數(shù)new與make的使用和區(qū)別

標(biāo)簽:湘潭 銅川 衡水 仙桃 黃山 崇左 蘭州 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Go語(yǔ)言中new()和 make()的區(qū)別詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢(xún)

    • 400-1100-266
    佛山市| 姜堰市| 彝良县| 贡觉县| 合江县| 华蓥市| 桂林市| 旺苍县| 武夷山市| 七台河市| 德令哈市| 宜阳县| 阳曲县| 武定县| 来安县| 星座| 茂名市| 昌吉市| 肥西县| 大悟县| 重庆市| 满洲里市| 宁国市| 桦甸市| 南昌县| 佳木斯市| 浙江省| 河西区| 如东县| 娄烦县| 于田县| 岳普湖县| 玛纳斯县| 鄂温| 合江县| 增城市| 于都县| 东丰县| 炎陵县| 葵青区| 广德县|