new簡(jiǎn)介及使用方式
- new() 用于返回類型指針,這個(gè)操作:分兩步逛裤,第一步:初始化一個(gè)變量為零的值誊抛,第二步:生成一個(gè)指向類型變量的地址。
- &Type 返回類型變量的地址困肩,這個(gè)操作:分兩步划纽,第一步:初始化一個(gè)變量(變量值可以不為零)的值,第二步:生成類型變量的地址并返回锌畸。
- 相同點(diǎn)和不同點(diǎn):
都是返回指向變量的地址
new()不支持初始化變量的值(默認(rèn)值都是零)勇劣,&Type支持初始化自定義變量的值 - 使用方式
type SyncedBuffer struct {
str string
num int
sum int
}
m := new(SyncedBuffer)
fmt.Println("new m 變量輸出:", m) //new m 變量輸出: &{ 0 0}
m1 := SyncedBuffer{}
fmt.Println("普通賦值 m1 變量輸出:",m1) // 普通賦值 m1 變量輸出: { 0 0}
m2 := &SyncedBuffer{}
fmt.Println("&Type賦值 m2 變量輸出:", m2) // &Type賦值 m2 變量輸出: &{ 0 0}
m3 := &SyncedBuffer{"123",123, 44}
fmt.Println("&Type賦值 帶有初始值的m3 變量輸出:", m3)//&Type賦值 帶有初始值的m3 變量輸出: &{m3Test 123 44}
make簡(jiǎn)介及使用方式
- make() 只作用于創(chuàng)建slice、map、channel這三種比默,這三種類型本來(lái)就是引用類型幻捏。
- 使用方式:
make(Type, size, num) return Type
Slice := make([]int, 3, 5) // 生成一個(gè)int類型切片,初始長(zhǎng)度:3命咐,容量:5
Map := make(map[string]int,5) // 生成一個(gè)鍵string值int類型的字典粘咖,長(zhǎng)度:5
Chan := make(chan int, 5) // 生成一個(gè)int類型的通道侈百,長(zhǎng)度:5
new和make使用場(chǎng)景
new || &Type 場(chǎng)景:
new() 變量類型里面的值瓮下,是零值,就可以钝域,不需要?jiǎng)討B(tài)變化讽坏,比如type struct 屬性全是鎖。&type 可以自定義初始化變量的值例证,也可以像new()一樣路呜,默認(rèn)生成值(零值),這樣做的好處织咧,不用想c語(yǔ)言那樣胀葱,申請(qǐng)一個(gè)變量,在取地址笙蒙,賦值給指針變量抵屿,簡(jiǎn)化操作,注重實(shí)用捅位。
make 使用場(chǎng)景:
使用map轧葛、silce、channel三種資源類型艇搀,自己通過(guò)這三種組合方式尿扯,定義的類型。