最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言學(xué)習(xí)之new函數(shù)的用法詳解

 更新時(shí)間:2023年05月12日 08:56:30   作者:人艱不拆_zmc  
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中new()函數(shù)的相關(guān)知識(shí)以及具體用法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下

1、new函數(shù)介紹

在 Go 語(yǔ)言中,new 函數(shù)用于動(dòng)態(tài)地分配內(nèi)存,返回一個(gè)指向新分配的零值的指針。它的語(yǔ)法如下:

func new(Type) *Type

其中,Type 表示要分配的內(nèi)存的類型,new 函數(shù)返回一個(gè)指向 Type 類型的新分配的零值的指針。但是需要注意的是,new 函數(shù)只分配內(nèi)存,并返回指向新分配的零值的指針,而不會(huì)初始化該內(nèi)存。

所謂零值,是指 Go 語(yǔ)言中變量在聲明時(shí)自動(dòng)賦予的默認(rèn)值。對(duì)于基本類型來(lái)說(shuō),它們的零值如下:

  • 布爾型:false
  • 整型:0
  • 浮點(diǎn)型:0.0
  • 復(fù)數(shù)型:0 + 0i
  • 字符串:""(空字符串)
  • 指針:nil
  • 接口:nil
  • 切片、映射和通道:nil

因此,new 函數(shù)返回的指針指向新分配的零值,但不會(huì)將其初始化為非零值。如果需要將內(nèi)存初始化為非零值,可以使用結(jié)構(gòu)體字面量或者顯式地為其賦值。

2、示例

(1)示例 1:

package main
 
import (
    "fmt"
)
 
func main() {
    var p *int
    p = new(int)
    fmt.Println(*p) //0
}

上面的代碼首先聲明了一個(gè)指向整數(shù)的指針 p,然后使用 new 函數(shù)分配了一個(gè)新的整數(shù),將其地址賦給 p。由于 new 函數(shù)返回的指針指向新分配的零值,因此 p 的值為 0。

(2)示例 2:

在實(shí)際編程中,new 函數(shù)通常與結(jié)構(gòu)體類型一起使用,以便為結(jié)構(gòu)體動(dòng)態(tài)地分配內(nèi)存。例如,以下代碼定義了一個(gè)名為 Person 的結(jié)構(gòu)體類型,并使用 new 函數(shù)為其分配內(nèi)存:

package main
  
import "fmt"
  
type Person struct {
    name string
    age  int
    sex  int
}
  
func main() {
    // 使用 new 函數(shù)分配內(nèi)存,但不會(huì)將其初始化為非零值
    p := new(Person)
    fmt.Println(p) // 輸出:&{ 0 0}
  
    // 使用結(jié)構(gòu)體字面量初始化
    p2 := &Person{name: "Tom", age: 18, sex: 1}
    fmt.Println(p2) // 輸出:&{Tom 18 1}
  
    // 顯式為字段賦值
    p3 := new(Person)
    p3.name = "Jerry"
    p3.age = 20
    p3.sex = 0
    fmt.Println(p3) // 輸出:&{Jerry 20 0}
}

上面的代碼中,使用 new 函數(shù)分配了一個(gè)新的 Person 結(jié)構(gòu)體,但不會(huì)將其初始化為非零值,因此輸出結(jié)果是"空字符串 0 0"。接下來(lái),使用結(jié)構(gòu)體字面量或者顯式為其賦值,將其初始化為非零值?! ?/p>

注意 1:p3 := new(Person) 返回是指向新分配的Person類型對(duì)象零值的指針,按照我們對(duì)指針語(yǔ)法的了解,基于p3顯示賦值的話需要使用如下語(yǔ)法進(jìn)行賦值:

(*p3).name = "Jerry"
(*p3).age = 20
(*p3).sex = 0

 而我們?cè)趯?duì)指針類型結(jié)構(gòu)體對(duì)象賦值的時(shí)候一般都很少會(huì)帶著*,這是Go指針語(yǔ)法糖為我們做的簡(jiǎn)化。 

3、總結(jié)

表達(dá)式new(T)將創(chuàng)建一個(gè)T類型的匿名變量,所做的是為T類型的新值分配并清零一塊內(nèi)存空間,然后將這塊內(nèi)存空間的地址作為結(jié)果返回,而這個(gè)結(jié)果就是指向這個(gè)新的T類型值的指針值,返回的指針類型為*T。

new創(chuàng)建的內(nèi)存空間位于heap上,空間的默認(rèn)值為數(shù)據(jù)類型默認(rèn)值。如:new(int) 則 *p為0,new(bool) 則 *p為false。如果需要將內(nèi)存初始化為非零值,可以使用結(jié)構(gòu)體字面量或者顯式地為其賦值。

我們只需使用new()函數(shù),無(wú)需擔(dān)心其內(nèi)存的生命周期或怎樣將其刪除,因?yàn)镚o語(yǔ)言的內(nèi)存管理系統(tǒng)會(huì)幫我們打理一切。

到此這篇關(guān)于Go語(yǔ)言學(xué)習(xí)之new函數(shù)的用法詳解的文章就介紹到這了,更多相關(guān)Go語(yǔ)言new函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Go語(yǔ)言實(shí)現(xiàn)插入排序算法及優(yōu)化

    基于Go語(yǔ)言實(shí)現(xiàn)插入排序算法及優(yōu)化

    插入排序是一種簡(jiǎn)單的排序算法。這篇文章將利用Go語(yǔ)言實(shí)現(xiàn)冒泡排序算法,文中的示例代碼講解詳細(xì),對(duì)學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以參考一下
    2022-12-12
  • Go Map并發(fā)沖突預(yù)防與解決

    Go Map并發(fā)沖突預(yù)防與解決

    這篇文章主要為大家介紹了Go Map并發(fā)沖突預(yù)防與解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    這篇文章主要介紹了golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例

    Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例

    這篇文章主要介紹了Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Go處理包含多種引號(hào)的字符串的幾種方法

    Go處理包含多種引號(hào)的字符串的幾種方法

    在Go中,有幾種方式可以處理包含多種引號(hào)的字符串,以確保代碼的可讀性和正確性,本文將給大家詳細(xì)介紹了這幾種處理方式,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • 深入解析Go語(yǔ)言編程中的遞歸使用

    深入解析Go語(yǔ)言編程中的遞歸使用

    這篇文章主要介紹了Go語(yǔ)言編程中的遞歸使用,是Go語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • 用golang實(shí)現(xiàn)一個(gè)定時(shí)器任務(wù)隊(duì)列實(shí)例

    用golang實(shí)現(xiàn)一個(gè)定時(shí)器任務(wù)隊(duì)列實(shí)例

    golang中提供了2種定時(shí)器timer和ticker,分別是一次性定時(shí)器和重復(fù)任務(wù)定時(shí)器。這篇文章主要介紹了用golang實(shí)現(xiàn)一個(gè)定時(shí)器任務(wù)隊(duì)列實(shí)例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-05-05
  • golang中為什么不存在三元運(yùn)算符詳解

    golang中為什么不存在三元運(yùn)算符詳解

    這篇文章主要給大家介紹了關(guān)于golang中為什么不存在三元運(yùn)算符的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Golang中Error的設(shè)計(jì)與實(shí)踐詳解

    Golang中Error的設(shè)計(jì)與實(shí)踐詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中Error的設(shè)計(jì)以及是具體如何處理錯(cuò)誤的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • 如何解決goland,idea全局搜索快捷鍵失效問(wèn)題

    如何解決goland,idea全局搜索快捷鍵失效問(wèn)題

    這篇文章主要介紹了如何解決goland,idea全局搜索快捷鍵失效問(wèn)題,快捷鍵失效,可能是快捷鍵沖突,也或者是快捷鍵被修改成其他了。在settings下查看快捷鍵是否被修改,下文詳細(xì)介紹需要的朋友可以參考下
    2022-04-04

最新評(píng)論

宁蒗| 阳谷县| 延川县| 开化县| 论坛| 银川市| 咸宁市| 贵阳市| 常宁市| 墨江| 西平县| 平山县| 宁都县| 滨海县| 永仁县| 晋中市| 灌南县| 慈溪市| 南昌市| 仪陇县| 隆德县| 微山县| 武威市| 大安市| 土默特左旗| 县级市| 余江县| 黄浦区| 刚察县| 昌江| 佳木斯市| 进贤县| 绥芬河市| 潞城市| 常山县| 永靖县| 都兰县| 张北县| 尉犁县| 攀枝花市| 江源县|