go語言的new和make

2021-09-14 06:42:26 字數 858 閱讀 2147

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個本身就是引用型別,就不需要再...