偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Go 中 make 與 new:區(qū)別及優(yōu)秀實踐

開發(fā) 后端
Go 中 make 與 new 雖均可分配內(nèi)存,但定位和使用場景截然不同。正確區(qū)分并合理使用,有助于編寫高效且易維護(hù)的代碼。

Go 提供兩種常用的內(nèi)存分配方式:make 與 new。二者雖均可分配內(nèi)存,但定位和使用場景截然不同。正確區(qū)分并合理使用,有助于編寫高效且易維護(hù)的代碼。

new:分配并返回類型指針

new功能如下:

  • 為任意類型分配零值內(nèi)存;
  • 返回指向該內(nèi)存的指針。

示例:

p := new(int)
fmt.Println(*p) // 0

特點(diǎn):

  • 返回值:*T(類型指針);
  • 初始化:自動填充零值;
  • 適用范圍:所有類型,常用于結(jié)構(gòu)體或基礎(chǔ)類型。

make:初始化切片、映射和通道

make 功能如下:

  • 專用于內(nèi)置引用類型:切片、映射和通道;
  • 分配底層數(shù)據(jù)結(jié)構(gòu)并完成必要初始化。

示例:

// 切片
s := make([]int, 5)           // 長度 5,容量 5
// 映射
m := make(map[string]int, 10) // 初始容量 10
// 緩沖通道
ch := make(chan int, 2)

特點(diǎn):

  • 返回值:對象本身(而非指針)。
  • 初始化:完成長度、容量或緩沖區(qū)設(shè)置。
  • 適用范圍:僅限切片、映射、通道。

差異對比

維度

new

make

目的

分配零值內(nèi)存

初始化切片、映射、通道

返回值

指針 *T

對象本身

適用類型

所有類型

切片、映射、通道

初始化行為

填充零值

構(gòu)建底層數(shù)據(jù)結(jié)構(gòu)并設(shè)定容量/緩沖區(qū)

使用建議

何時使用 new:

  • 創(chuàng)建結(jié)構(gòu)體或基本類型指針,且無需自定義初始化邏輯。
  • 需要持有可變對象的指針以便在多處共享。
type Person struct{ Name string; Age int }
p := new(Person) // &{"" 0}

何時使用 make:

  • 創(chuàng)建并初始化切片、映射或通道,尤其需指定容量或緩沖區(qū)時。
s  := make([]int, 0, 64)      // 預(yù)分配容量
m  := make(map[string]int, 32)
ch := make(chan struct{}, 4)

性能考量

  • new 僅做零值填充,開銷最小。
  • make 同時分配并初始化底層結(jié)構(gòu);為切片、映射預(yù)設(shè)合適容量,可減少后續(xù)擴(kuò)容成本。
  • 對切片、映射、通道使用 new 只會得到 nil 引用,訪問時將導(dǎo)致運(yùn)行時錯誤。

常見誤用示例

// 誤用:僅分配指針,未初始化映射
m := new(map[string]int)
(*m)["age"] = 30 // panic: assignment to entry in nil map

// 正確做法
m := make(map[string]int)
m["age"] = 30

小結(jié)

  • new:面向所有類型,返回指針,自動零值初始化。
  • make:面向切片、映射和通道,返回已初始化的對象,并可指定容量或緩沖區(qū)。

熟練掌握二者差異并依據(jù)場景選擇,可有效提高 Go 代碼的性能與可維護(hù)性。

責(zé)任編輯:趙寧寧 來源: 令飛編程
相關(guān)推薦

2023-10-23 19:27:21

Go函數(shù)

2023-03-24 08:01:27

Go語言內(nèi)存

2023-10-27 11:27:14

Go函數(shù)

2022-10-30 23:13:30

contextGo語言

2021-03-05 08:51:00

Go語言make

2025-05-20 08:20:00

GoGo Context上下文

2021-09-26 09:40:11

補(bǔ)丁流程實踐

2023-10-27 12:11:33

2023-10-19 08:00:00

2022-05-24 16:14:01

CSS實踐

2024-01-12 09:30:09

CDC變更數(shù)據(jù)捕獲系統(tǒng)

2009-10-27 17:58:12

linux make命

2023-09-27 23:57:21

2024-01-23 13:00:00

Arthas命令Java

2011-05-24 16:46:48

mallocfreenew

2020-09-15 12:57:56

Golangnewmake

2022-10-24 00:03:26

GolangNew函數(shù)

2024-02-22 08:35:49

2021-07-01 15:17:14

MYSQL存儲數(shù)據(jù)庫

2024-11-28 09:43:04

點(diǎn)贊
收藏

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