Go語言中make和new函數怎么使用

蝸牛 互聯網技術資訊 2022-07-18 12 0

這篇文章主要講解了“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的源代碼如下

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

Go語言中make和new函數怎么使用  go語言 第1張

make也是用于內存分配的,但是和new不同,它只用于chan、map以及slice的內存創建,

而且它返回的類型就是這三個類型本身,而不是他們的指針類型,因為這三種類型就是引用類型,所以就沒有必要返回他們的指針了。

綜上:

二者都是內存的分配(堆上)

區別1
  • make只用于slice、map以及channel的初始化(非零值);

  • new用于類型的內存分配,并且內存置為零。

區別2
  • make返回的還是這三個引用類型本身;

  • new返回的是指向類型的指針。

感謝各位的閱讀,以上就是“Go語言中make和new函數怎么使用”的內容了,經過本文的學習后,相信大家對Go語言中make和new函數怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是蝸牛博客,小編將為大家推送更多相關知識點的文章,歡迎關注!

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:niceseo99@gmail.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

評論

2018人人澡人摸人人添_月夜影视在线观看资源_一本二卡三卡四卡乱码小说_tobu8在线观看下载