日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

三年Golang碼農(nóng),竟然不知道New和Make有什么區(qū)別?

來源: 責編: 時間:2024-09-10 09:42:15 108觀看
導讀在 Go 語言中,new 和 make 是兩個用于內(nèi)存分配的內(nèi)置函數(shù),但它們有不同的用途和行為。理解它們之間的區(qū)別對于正確地使用 Go 語言的內(nèi)存管理至關重要。new 和 make 的區(qū)別new 函數(shù):用途:new 用于為變量分配內(nèi)存,并返回指向

在 Go 語言中,new 和 make 是兩個用于內(nèi)存分配的內(nèi)置函數(shù),但它們有不同的用途和行為。理解它們之間的區(qū)別對于正確地使用 Go 語言的內(nèi)存管理至關重要。j7428資訊網(wǎng)——每日最新資訊28at.com

new 和 make 的區(qū)別

  1. new 函數(shù):

用途:new 用于為變量分配內(nèi)存,并返回指向該內(nèi)存的指針。j7428資訊網(wǎng)——每日最新資訊28at.com

返回值:new 返回的是一個指向類型的指針,且該內(nèi)存區(qū)域會被初始化為零值(例如整數(shù)為 0,布爾為 false,指針為 nil)。j7428資訊網(wǎng)——每日最新資訊28at.com

適用類型:可以用于所有類型,包括基本類型(如 int、float 等)和復合類型(如 struct、數(shù)組等)。j7428資訊網(wǎng)——每日最新資訊28at.com

語法:new(T),其中 T 是要分配的類型。j7428資訊網(wǎng)——每日最新資訊28at.com

  1. make 函數(shù):

用途:make 用于為特定類型的數(shù)據(jù)結(jié)構(gòu)分配和初始化內(nèi)存,這些類型包括切片(slice)、映射(map)和信道(channel)。j7428資訊網(wǎng)——每日最新資訊28at.com

返回值:make 返回初始化后的值,而不是指針。j7428資訊網(wǎng)——每日最新資訊28at.com

適用類型:只能用于切片、映射和信道,不能用于其他類型。j7428資訊網(wǎng)——每日最新資訊28at.com

語法:make(T, size),其中 T 是要分配的類型,size 是指定的大小(對于映射和信道是容量)。j7428資訊網(wǎng)——每日最新資訊28at.com

代碼實例

使用 new

package mainimport "fmt"func main() {    // 使用 new 分配一個 int 類型的指針    ptr := new(int)    fmt.Println(ptr)  // 輸出指針地址,例如:0xc000016088    fmt.Println(*ptr) // 輸出零值:0    // 將指針指向的值修改為 100    *ptr = 100    fmt.Println(*ptr) // 輸出:100    // 使用 new 分配一個 struct 的指針    type Person struct {        Name string        Age  int    }    p := new(Person)    fmt.Println(p)       // 輸出:&{ 0},零值初始化    fmt.Println(p.Name)  // 輸出:""(空字符串)    fmt.Println(p.Age)   // 輸出:0    // 修改結(jié)構(gòu)體中的字段    p.Name = "Alice"    p.Age = 30    fmt.Println(*p) // 輸出:{Alice 30}}

使用 make

package mainimport "fmt"func main() {    // 使用 make 分配一個切片    slice := make([]int, 5) // 創(chuàng)建一個長度為 5 的切片,初始值為 0    fmt.Println(slice)      // 輸出:[0 0 0 0 0]    slice[0] = 10    fmt.Println(slice)      // 輸出:[10 0 0 0 0]    // 使用 make 分配一個映射    myMap := make(map[string]int)    myMap["key1"] = 100    fmt.Println(myMap)      // 輸出:map[key1:100]    // 使用 make 分配一個信道    ch := make(chan int, 2) // 創(chuàng)建一個容量為 2 的緩沖信道    ch <- 1    ch <- 2    fmt.Println(<-ch)       // 輸出:1    fmt.Println(<-ch)       // 輸出:2}

總結(jié)

  • new:用于分配內(nèi)存并返回指針。適用于所有類型。分配的內(nèi)存會被初始化為類型的零值。
  • make:用于初始化切片、映射和信道,返回的是初始化后的類型,而不是指針。make 不會返回指針,因為它返回的是已經(jīng)初始化好的數(shù)據(jù)結(jié)構(gòu)。

正確理解和使用 new 和 make,可以更好地管理 Go 語言中的內(nèi)存分配和數(shù)據(jù)結(jié)構(gòu)初始化。j7428資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-112700-0.html三年Golang碼農(nóng),竟然不知道New和Make有什么區(qū)別?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2025 款漢上市售價 16.58 萬~23.58 萬元,引領中大型轎車油耗進入 3 時代

下一篇: 我們一起聊聊 JVM 是如何執(zhí)行Java程序的

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 乌鲁木齐市| 芜湖市| 谢通门县| 乐安县| 肃宁县| 永城市| 进贤县| 视频| 巴马| 台湾省| 上蔡县| 葫芦岛市| 碌曲县| 勃利县| 吉安县| 鄂温| 嘉定区| 荆州市| 康定县| 安国市| 拜泉县| 衡阳县| 三台县| 彭州市| 墨脱县| 收藏| 廊坊市| 德安县| 如东县| 新安县| 宝鸡市| 克山县| 清水县| 梓潼县| 离岛区| 蓬溪县| 鄯善县| 清新县| 云林县| 乌拉特后旗| 沁水县|