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

Go語(yǔ)言中make和new函數(shù)的用法與區(qū)別

 更新時(shí)間:2022年07月16日 14:13:44   作者:奮斗的大橙子  
這篇文章介紹了Go語(yǔ)言中make和new函數(shù)的用法與區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

相同點(diǎn):

make和new都是用來(lái)創(chuàng)建分配類(lèi)型內(nèi)存的。

不同點(diǎn):

先看下面的代碼

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

編譯過(guò)程會(huì)出錯(cuò)

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 沒(méi)有初始化,所以并不知道 *i的地址是什么,如果直接 *i的賦值為10,那么肯定是不行的(10這個(gè)地址沒(méi)有)

所以要想使用 *i,需要把 x的地址給i,修改成如下代碼

var i *int
var x = 10
i=&x
fmt.Println(*i)

補(bǔ)充: * 代表取地址里內(nèi)容&代表取地址

或者使用 new 進(jìn)行初始化,代碼如下:

var x = 10
var i *int i = new(int)
*i=x
fmt.Println(*i)

new的源代碼如下

它只接受一個(gè)參數(shù),這個(gè)參數(shù)是一個(gè)類(lèi)型,分配好內(nèi)存后,返回一個(gè)指向該類(lèi)型內(nèi)存地址的指針。同時(shí)請(qǐng)注意它同時(shí)把分配的內(nèi)存置為零,也就是類(lèi)型的零值。

make也是用于內(nèi)存分配的,但是和new不同,它只用于chan、map以及slice的內(nèi)存創(chuàng)建,

而且它返回的類(lèi)型就是這三個(gè)類(lèi)型本身,而不是他們的指針類(lèi)型,因?yàn)檫@三種類(lèi)型就是引用類(lèi)型,所以就沒(méi)有必要返回他們的指針了。

綜上:

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

區(qū)別1

  • make只用于slice、map以及channel的初始化(非零值);
  • new用于類(lèi)型的內(nèi)存分配,并且內(nèi)存置為零。

區(qū)別2

  • make返回的還是這三個(gè)引用類(lèi)型本身;
  • new返回的是指向類(lèi)型的指針。

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

相關(guān)文章

  • 一文帶你了解Go語(yǔ)言fmt標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用

    一文帶你了解Go語(yǔ)言fmt標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中 fmt 標(biāo)準(zhǔn)庫(kù)輸出函數(shù)的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容

    Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容

    這篇文章主要介紹了Golang語(yǔ)言如何讀取http.Request中body的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題

    golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題

    這篇文章主要介紹了golang?http請(qǐng)求未釋放造成的錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Golang泛型與類(lèi)型約束的用法詳解

    Golang泛型與類(lèi)型約束的用法詳解

    這篇文章主要介紹了Golang泛型與類(lèi)型約束的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Golang學(xué)習(xí)筆記之安裝Go1.15版本(win/linux/macos/docker安裝)

    Golang學(xué)習(xí)筆記之安裝Go1.15版本(win/linux/macos/docker安裝)

    這篇文章主要介紹了Golang學(xué)習(xí)筆記之安裝Go1.15版本(win/linux/macos/docker安裝),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 1行Go代碼實(shí)現(xiàn)反向代理的示例

    1行Go代碼實(shí)現(xiàn)反向代理的示例

    這篇文章主要介紹了1行Go代碼實(shí)現(xiàn)反向代理的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • go語(yǔ)言學(xué)習(xí)之包和變量詳解

    go語(yǔ)言學(xué)習(xí)之包和變量詳解

    這篇文章主要給大家愛(ài)介紹了關(guān)于go語(yǔ)言學(xué)習(xí)之包和變量的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用go語(yǔ)言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    本文主要介紹了Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Go語(yǔ)言入門(mén)Go?Web?Fiber框架快速了解

    Go語(yǔ)言入門(mén)Go?Web?Fiber框架快速了解

    這篇文章主要為大家介紹了Go語(yǔ)言入門(mén)Go?Web?Fiber框架的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Go語(yǔ)言基礎(chǔ)switch條件語(yǔ)句基本用法及示例詳解

    Go語(yǔ)言基礎(chǔ)switch條件語(yǔ)句基本用法及示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)switch條件語(yǔ)句基本用法及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11

最新評(píng)論