欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言學習之new函數(shù)的用法詳解

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

1、new函數(shù)介紹

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

func new(Type) *Type

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

所謂零值,是指 Go 語言中變量在聲明時自動賦予的默認值。對于基本類型來說,它們的零值如下:

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

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

2、示例

(1)示例 1:

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

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

(2)示例 2:

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

package main
  
import "fmt"
  
type Person struct {
    name string
    age  int
    sex  int
}
  
func main() {
    // 使用 new 函數(shù)分配內(nèi)存,但不會將其初始化為非零值
    p := new(Person)
    fmt.Println(p) // 輸出:&{ 0 0}
  
    // 使用結構體字面量初始化
    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ù)分配了一個新的 Person 結構體,但不會將其初始化為非零值,因此輸出結果是"空字符串 0 0"。接下來,使用結構體字面量或者顯式為其賦值,將其初始化為非零值?! ?/p>

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

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

 而我們在對指針類型結構體對象賦值的時候一般都很少會帶著*,這是Go指針語法糖為我們做的簡化?!?/p>

3、總結

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

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

我們只需使用new()函數(shù),無需擔心其內(nèi)存的生命周期或怎樣將其刪除,因為Go語言的內(nèi)存管理系統(tǒng)會幫我們打理一切。

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

相關文章

  • 詳解Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束

    詳解Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束

    這篇文章主要為大家詳細介紹了Golang如何監(jiān)聽某個函數(shù)的開始執(zhí)行和執(zhí)行結束,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2024-02-02
  • go-micro使用Consul做服務發(fā)現(xiàn)的方法和原理解析

    go-micro使用Consul做服務發(fā)現(xiàn)的方法和原理解析

    這篇文章主要介紹了go-micro使用Consul做服務發(fā)現(xiàn)的方法和原理,這里提供一個通過docker快速安裝Consul的方式,當然前提是你得安裝了docker,需要的朋友可以參考下
    2022-04-04
  • Win10系統(tǒng)下Golang環(huán)境搭建全過程

    Win10系統(tǒng)下Golang環(huán)境搭建全過程

    在編程語言的選取上,越來越多的人選擇了Golang,下面這篇文章主要給大家介紹了關于Win10系統(tǒng)下Golang環(huán)境搭建的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • go語言定時器Timer及Ticker的功能使用示例詳解

    go語言定時器Timer及Ticker的功能使用示例詳解

    這篇文章主要為大家介紹了go語言定時器的功能使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 一文帶你掌握GoLang中的指針

    一文帶你掌握GoLang中的指針

    針是?Go?編程語言的重要組成部分,它們提供了一種直接引用和操作內(nèi)存中數(shù)據(jù)的方法,在這篇文章中,我們將探討一些技巧和技巧,以掌握?GoLang?中的指針并編寫高效的代碼,需要的可以參考一下
    2023-05-05
  • 攔截信號Golang應用優(yōu)雅關閉的操作方法

    攔截信號Golang應用優(yōu)雅關閉的操作方法

    這篇文章主要介紹了攔截信號優(yōu)雅關閉Golang應用,本文介紹了信號的概念及常用信號,并給出了應用廣泛的幾個示例,例如優(yōu)雅地關閉應用服務、在命令行應用中接收終止命令,需要的朋友可以參考下
    2023-02-02
  • 基于GORM實現(xiàn)CreateOrUpdate方法詳解

    基于GORM實現(xiàn)CreateOrUpdate方法詳解

    這篇文章主要為大家介紹了基于GORM實現(xiàn)CreateOrUpdate方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 夯實Golang基礎之數(shù)據(jù)類型梳理匯總

    夯實Golang基礎之數(shù)據(jù)類型梳理匯總

    這篇文章主要8為大家介紹了夯實Golang基礎之數(shù)據(jù)類型梳理匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-10-10
  • golang中strconv.ParseInt函數(shù)用法示例

    golang中strconv.ParseInt函數(shù)用法示例

    這篇文章主要介紹了golang中strconv.ParseInt函數(shù)用法,實例分析了strconv.ParseInt函數(shù)將字符串轉(zhuǎn)換為數(shù)字的簡單使用方法,需要的朋友可以參考下
    2016-07-07
  • 詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理

    這篇文章主要介紹了詳解Go多協(xié)程并發(fā)環(huán)境下的錯誤處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論