Go語言中make和new函數怎么使用
這篇文章主要講解了“Go語言中make和new函數怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go語言中make和new函數怎么使用”吧!
相同點:
make和new都是用來創建分配類型內存的。
不同點:
先看下面的代碼
package?main<br?data-filtered="filtered"> import?"fmt"?<br?data-filtered="filtered"> func?main(){ ??var?i?*int ??var?x?=?10 ??*i=x ??fmt.Println(*i) }
編譯過程會出錯
panic: runtime error: invalid memory address or nil pointer dereference <br data-filtered="filtered">[signal 0xc0000005 code=0x1 addr=0x0 pc=0x48b576]
我們的想法是把 10 賦值 i指向的地址,但是這里由于 *i 沒有初始化,所以并不知道 *i的地址是什么,如果直接 *i的賦值為10,那么肯定是不行的(10這個地址沒有)
所以要想使用 *i,需要把 x的地址給i,修改成如下代碼
var?i?*int var?x?=?10 i=&x fmt.Println(*i)
補充: * 代表取地址里內容
, &代表取地址
或者使用 new 進行初始化,代碼如下:
var?x?=?10 var?i?*int?i?=?new(int) *i=x fmt.Println(*i)
new的源代碼如下
它只接受一個參數,這個參數是一個類型,分配好內存后,返回一個指向該類型內存地址的指針。同時請注意它同時把分配的內存置為零,也就是類型的零值。
make也是用于內存分配的,但是和new不同,它只用于chan、map以及slice的內存創建,
而且它返回的類型就是這三個類型本身,而不是他們的指針類型,因為這三種類型就是引用類型,所以就沒有必要返回他們的指針了。
綜上:
二者都是內存的分配(堆上)
區別1
make只用于slice、map以及channel的初始化(非零值);
new用于類型的內存分配,并且內存置為零。
區別2
make返回的還是這三個引用類型本身;
new返回的是指向類型的指針。
感謝各位的閱讀,以上就是“Go語言中make和new函數怎么使用”的內容了,經過本文的學習后,相信大家對Go語言中make和new函數怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是蝸牛博客,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。
評論