亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

深入講解Go語言中函數new與make的使用和區別

2020-04-01 19:02:56
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了Go語言中函數new與golang/70755.html">make的使用和區別,關于Go語言中new和make是內建的兩個函數,主要用來創建分配類型內存。在我們定義生成變量的時候,可能會覺得有點迷惑,其實他們的規則很簡單,下面我們就通過一些示例說明他們的區別和使用,話不多說了,來一起看看詳細的介紹吧。

變量的聲明

var i intvar s string

變量的聲明我們可以通過var關鍵字,然后就可以在程序中使用。當我們不指定變量的默認值時,這些變量的默認值是他們的零值,比如int類型的零值是0,string類型的零值是"",引用類型的零值是nil。

對于例子中的兩種類型的聲明,我們可以直接使用,對其進行賦值輸出。但是如果我們換成引用類型呢?

package mainimport ( "fmt")func main() { var i *int *i=10 fmt.Println(*i)}

這個例子會打印出什么?0還是10?。以上全錯,運行的時候會painc,原因如下:

panic: runtime error: invalid memory address or nil pointer dereference

從這個提示中可以看出,對于引用類型的變量,我們不光要聲明它,還要為它分配內容空間,否則我們的值放在哪里去呢?這就是上面錯誤提示的原因。

對于值類型的聲明不需要,是因為已經默認幫我們分配好了。

要分配內存,就引出來今天的new和make。

new

對于上面的問題我們如何解決呢?既然我們知道了沒有為其分配內存,那么我們使用new分配一個吧。

func main() { var i *int i=new(int) *i=10 fmt.Println(*i)}

現在再運行程序,完美PASS,打印10?,F在讓我們看下new這個內置的函數。

// The new built-in function allocates memory. The first argument is a type,// not a value, and the value returned is a pointer to a newly// allocated zero value of that type.func new(Type) *Type

它只接受一個參數,這個參數是一個類型,分配好內存后,返回一個指向該類型內存地址的指針。同時請注意它同時把分配的內存置為零,也就是類型的零值。

我們的例子中,如果沒有*i=10,那么打印的就是0。這里體現不出來new函數這種內存置為零的好處,我們再看一個例子。

func main() { u:=new(user) u.lock.Lock() u.name = "張三" u.lock.Unlock() fmt.Println(u)}type user struct { lock sync.Mutex name string age int}

示例中的user類型中的lock字段我不用初始化,直接可以拿來用,不會有無效內存引用異常,因為它已經被零值了。

這就是new,它返回的永遠是類型的指針,指向分配類型的內存地址。

make

make也是用于內存分配的,但是和new不同,它只用于chan、map以及切片的內存創建,而且它返回的類型就是這三個類型本身,而不是他們的指針類型,因為這三種類型就是引用類型,所以就沒有必要返回他們的指針了。

注意,因為這三種類型是引用類型,所以必須得初始化,但是不是置為零值,這個和new是不一樣的。

func make(t Type, size ...IntegerType) Type

從函數聲明中可以看到,返回的還是該類型。

二者異同

所以從這里可以看的很明白了,二者都是內存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于類型的內存分配,并且內存置為零。所以在我們編寫程序的時候,就可以根據自己的需要很好的選擇了。

make返回的還是這三個引用類型本身;而new返回的是指向類型的指針。

其實new不常用

所以有new這個內置函數,可以給我們分配一塊內存讓我們使用,但是現實的編碼中,它是不常用的。我們通常都是采用短語句聲明以及結構體的字面量達到我們的目的,比如:

i:=0u:=user{}

這樣更簡潔方便,而且不會涉及到指針這種比麻煩的操作。

make函數是無可替代的,我們在使用slice、map以及channel的時候,還是要使用make進行初始化,然后才才可以對他們進行操作。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日本中文字幕| 91亚洲午夜在线| 亚洲qvod图片区电影| 日韩精品视频在线观看免费| 成人黄色午夜影院| 日日骚久久av| 韩剧1988免费观看全集| 激情av一区二区| 欧美日韩国内自拍| 久久久久久com| 国产精品美女www爽爽爽视频| 久久久久国产精品免费| 久久亚洲成人精品| 国产成人97精品免费看片| 欧美日韩国产精品| 欧美视频在线看| 国产69久久精品成人看| 久久精品99久久久香蕉| 国模gogo一区二区大胆私拍| 国产成+人+综合+亚洲欧美丁香花| 国产精品私拍pans大尺度在线| 国产精品一区二区在线| 51视频国产精品一区二区| 91情侣偷在线精品国产| 欧美激情在线有限公司| 国产精品亚洲激情| 日韩美女在线播放| 亚洲欧美精品一区| 亚洲国产另类久久精品| 奇米4444一区二区三区| 亚洲精品免费av| 亚洲精品99久久久久| 国产做受69高潮| 久久精品视频导航| 91久久综合亚洲鲁鲁五月天| 国语自产偷拍精品视频偷| 久久精品国产一区二区三区| 久久亚洲影音av资源网| 国产91在线播放精品91| 国产97在线亚洲| y97精品国产97久久久久久| 久久97久久97精品免视看| 亚洲午夜av电影| 热久久99这里有精品| 欧美日韩亚洲视频一区| 中文字幕一区日韩电影| 欧美最顶级的aⅴ艳星| 成人激情视频在线播放| 国产在线观看不卡| 国产精品扒开腿做| 欧美亚洲在线视频| 亚洲mm色国产网站| 亚洲精品黄网在线观看| 国产精品主播视频| 亚洲欧美国内爽妇网| 91午夜在线播放| 久久韩国免费视频| 国产在线高清精品| 久久影视电视剧免费网站| 国产精品吴梦梦| 国产精品久久久久久久久久东京| 色中色综合影院手机版在线观看| 成人xvideos免费视频| 久久九九免费视频| 亚洲美女福利视频网站| 成人免费直播live| 在线看片第一页欧美| 亚洲成人aaa| 欧美日韩一区二区在线| 亚洲黄一区二区| 日韩美女视频免费看| 欧美猛交ⅹxxx乱大交视频| 欧美日韩亚洲一区二| 91在线观看免费网站| 45www国产精品网站| 97免费在线视频| 国产97色在线|日韩| 欧美福利视频在线| 国产精品入口日韩视频大尺度| 欧美性猛交xxxx乱大交3| 成人在线一区二区| 国产亚洲免费的视频看| 国产精品国产三级国产aⅴ浪潮| 欧美特级www| 欧美亚洲午夜视频在线观看| 欧美性69xxxx肥| 国产这里只有精品| 日韩中文有码在线视频| 尤物tv国产一区| 性色av香蕉一区二区| 日韩综合视频在线观看| 国产精品久久久久久久久久免费| 久久久亚洲影院你懂的| 欧美极品少妇xxxxⅹ免费视频| 日本高清视频一区| 九九九久久久久久| 国产一区玩具在线观看| www高清在线视频日韩欧美| 日韩av在线免播放器| 国产一区香蕉久久| 亚洲精品综合久久中文字幕| 国产精品久久久久久亚洲调教| 亚洲人成电影在线观看天堂色| 26uuu另类亚洲欧美日本一| 欧美视频中文在线看| 欧美在线视频免费播放| 中文字幕亚洲无线码a| 青青草99啪国产免费| 欧美激情中文字幕在线| 日韩av手机在线看| 欧美野外猛男的大粗鳮| 久久精品99无色码中文字幕| 欧美成人午夜激情视频| 欧美中文字幕在线| 国产精品亚洲美女av网站| 国内精品一区二区三区| 成人久久一区二区三区| 久久久精品中文字幕| 欧美日韩电影在线观看| 国产999在线| 久久不射电影网| 欧美大片大片在线播放| 日韩中文字幕在线观看| 国产99久久精品一区二区| 日韩欧美中文字幕在线观看| 成人黄色av免费在线观看| 久久亚洲电影天堂| 国产综合久久久久久| 高清欧美性猛交xxxx黑人猛交| 国产一区二区在线免费| 高跟丝袜一区二区三区| 亚洲深夜福利在线| 亚洲视频在线观看视频| 亚洲爱爱爱爱爱| 国模叶桐国产精品一区| 国产精品爽黄69| 久久资源免费视频| 亚洲免费福利视频| 精品亚洲一区二区三区四区五区| 久久久久久久久久久久久久久久久久av| 国产精品一区二区久久精品| 日韩av色在线| 亚洲精品自产拍| 亚洲欧美日韩直播| 欧美黄色片免费观看| 亚洲国产97在线精品一区| 国产精品99免视看9| 久久久久久久一区二区三区| 欧美麻豆久久久久久中文| 久久精品99无色码中文字幕| 欧美激情一级二级| 色www亚洲国产张柏芝| 国产精品久久久av| 欧美裸体xxxx极品少妇软件| 欧美专区国产专区| 亚洲精品在线不卡| 久久亚洲春色中文字幕| 久久久国产成人精品| 久久噜噜噜精品国产亚洲综合| 538国产精品一区二区免费视频| 欧美丝袜一区二区三区| 日韩中文综合网| 欧美视频在线观看 亚洲欧| 精品国产一区二区在线|