许多段落解释了许多段落解释之间的区别new()和make(),但在实践中,你可以在当地创建物体并返回它们。 : v7 l; p$ U% }; n为什么要使用这对分配器? ) @1 H0 b$ H( i' `9 o0 ] / {. N7 Z5 m4 M; O! `0 L0 \8 t4 n 解决方案: " @6 t* n& q/ d Go 内存分配和值初始化的方法有很多: ; Y2 T- d' N5 A) l/ L' Z&T{...}`,`&someLocalVar`,`new`,`make分配也可能发生在创建复合文本时。 ) q* | L# _/ K4 A& Ynew可用于分配整数等值,&int是非法的: R8 Q+ i0 w4 M9 q9 H9 e
new(Point)&oint OK&oint / Combines allocation and initializationnew(int)&int // Illegal// Works,but it is less convenient to write than new(int)var i int&i ; G. Q( T- N a
通过查看以下示例可以看出new和之间的区别make: 7 Z/ r0 m+ a' ^3 G5 I% F- R
p := new(chan int) // p has type: *chan intc := make(chan int) // c has type: chan int * k, i3 s4 W x4 T
假设 Go 没有newand make,但它具有内置函数NEW。示例代码将如下所示:; E4 I9 E9 I+ U
p := NEW(*chan int) // * is mandatoryc := NEW(chan int)2 m3 k% N: @& ?9 N