成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發(fā) 前端
在 Go 語言中,new? 和 make 是兩個用于內(nèi)存分配的內(nèi)置函數(shù),但它們有不同的用途和行為。理解它們之間的區(qū)別對于正確地使用 Go 語言的內(nèi)存管理至關(guān)重要。

在 Go 語言中,new 和 make 是兩個用于內(nèi)存分配的內(nèi)置函數(shù),但它們有不同的用途和行為。理解它們之間的區(qū)別對于正確地使用 Go 語言的內(nèi)存管理至關(guān)重要。

new 和 make 的區(qū)別

  1. new 函數(shù):

用途:new 用于為變量分配內(nèi)存,并返回指向該內(nèi)存的指針。

返回值:new 返回的是一個指向類型的指針,且該內(nèi)存區(qū)域會被初始化為零值(例如整數(shù)為 0,布爾為 false,指針為 nil)。

適用類型:可以用于所有類型,包括基本類型(如 int、float 等)和復(fù)合類型(如 struct、數(shù)組等)。

語法:new(T),其中 T 是要分配的類型。

  1. make 函數(shù):

用途:make 用于為特定類型的數(shù)據(jù)結(jié)構(gòu)分配和初始化內(nèi)存,這些類型包括切片(slice)、映射(map)和信道(channel)。

返回值:make 返回初始化后的值,而不是指針。

適用類型:只能用于切片、映射和信道,不能用于其他類型。

語法:make(T, size),其中 T 是要分配的類型,size 是指定的大?。▽τ谟成浜托诺朗侨萘浚?。

代碼實(shí)例

使用 new

package main


import "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 main


import "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 不會返回指針,因?yàn)樗祷氐氖且呀?jīng)初始化好的數(shù)據(jù)結(jié)構(gòu)。

正確理解和使用 new 和 make,可以更好地管理 Go 語言中的內(nèi)存分配和數(shù)據(jù)結(jié)構(gòu)初始化。

責(zé)任編輯:武曉燕 來源: Go語言圈
相關(guān)推薦

2023-03-03 07:40:52

MySQLSQL命令

2021-06-27 21:37:27

緩存雪崩穿透

2021-10-08 06:10:43

前端技術(shù)Vue

2020-06-12 08:15:40

計(jì)算機(jī)科學(xué)碼農(nóng)技術(shù)

2019-10-28 08:44:29

Code Review代碼團(tuán)隊(duì)

2022-10-24 00:03:26

GolangNew函數(shù)

2020-09-15 12:57:56

Golangnewmake

2022-10-27 19:32:20

切片golang數(shù)組

2024-05-27 00:00:00

localhostIPv6IPv4

2021-02-03 08:24:32

JavaScript技巧經(jīng)驗(yàn)

2022-03-13 18:53:31

interfacetypeTypeScript

2020-03-09 20:56:19

LoRaLoRaWAN無線技術(shù)

2022-09-07 18:32:57

并發(fā)編程線程

2022-09-08 18:38:26

LinuxWindowsmacOS

2022-06-06 14:53:02

LoRaLoRaWAN

2020-11-09 14:07:53

PyQtQt編程

2024-05-27 00:40:00

2022-02-27 15:33:22

安全CASBSASE

2021-12-17 14:40:02

while(1)for(;;)語言

2021-05-16 14:26:08

RPAIPACIO
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久久久久久久久久蜜桃 | 91精品国产综合久久久久久丝袜 | 麻豆国产一区二区三区四区 | 亚洲精品成人 | 91av久久久 | 一级黄色毛片免费 | 四虎永久免费黄色影片 | 婷婷久久综合 | 一区二区免费看 | 日韩欧美网 | 香蕉超碰| 天天久| 国产91在线播放 | 欧美三级三级三级爽爽爽 | 色av一区| 久久久久亚洲精品 | 日韩一区二区福利视频 | 亚洲区一区二 | 情侣黄网站免费看 | 国产成人99久久亚洲综合精品 | 免费a级毛片在线播放 | 18av在线播放 | 日韩在线一区视频 | 亚洲iv一区二区三区 | 精品国产18久久久久久二百 | 久久99国产精品久久99果冻传媒 | 91成人在线视频 | 一级黄色毛片免费 | 亚洲一区 中文字幕 | 国产成人一区二区三区久久久 | 国产精品美女久久久久aⅴ国产馆 | 久久99国产精品 | 性色av香蕉一区二区 | 亚洲精品乱码久久久久久按摩观 | 久久久123 | 国产精品高潮呻吟久久久久 | 欧美一级大片 | 国产成人精品网站 | 日韩精品一区二区在线观看 | 久久久久久91 | 久久久久国产一区二区三区不卡 |