golang的new和make主要區別如下:
effective go舉了乙個例子,見:
對於struct的分配和初始化,除了可以使用new外,還可以這樣做: t {},例如
func testalloc(t *testing.t)
var t1 *t
t1 = new(t)
fmt.println(t1)
t2 := t{}
fmt.println(t2)
t3 := t
fmt.println(t3)
}
值得注意的是,如果使用t{}的方式初始化變數的話:
1、與c語言不同,t{}分配的區域性變數是可以返回的,且返回後該空間不會釋放,例如
import "fmt"
type t struct
func a(i, j int) t
return i
}func b
2、乙個語法問題
使用t{}來初始化時,符號}不能單獨佔一行,否則會報錯,如下:
missing ',' before newline in composite literal
或者
syntax error: need trailing comma before newline in composite literal
non-declaration statement outside function body
syntax error: unexpected }
我曾經因為這個問題找了很久才解決。
**:
Go 語言程式設計 make 和 new
make 和 new 都是 golang 的內建函式,作為用於記憶體分配的原語 allocation primitives 其功能相似,卻有著本質的區別。the new built in function allocates memory.the first argument is a type,n...
Go語言new和make的區別
go有兩種分配原語,分別為new和make。他們做的事情不同,並且處理不同的型別,這看上去讓人感到困惑,但是規則相當簡單。new是乙個用來分配記憶體的內建函式 c 中是運算子 但他和大多數其他語言不同,new不會初始化記憶體 c 中會分配並呼叫建構函式 而是將記憶體歸0 也就是初始化成0 即,new...
go語言中new和make區別
new 和 make 是go語言的兩個內建函式,都是用來建立並分配記憶體,new函式只接受乙個引數,這個引數是乙個型別,並且返回乙個指向該型別記憶體位址的指標。而make只能用於 slice map 和 channel 的初始化,它返回的型別就是這三個型別本身,因為這3個本身就是引用型別,就不需要再...