new簡介及使用方式
- new() 用于返回類型指針,這個操作:分兩步,第一步:初始化一個變量為零的值,第二步:生成一個指向類型變量的地址。
- &Type 返回類型變量的地址,這個操作:分兩步,第一步:初始化一個變量(變量值可以不為零)的值,第二步:生成類型變量的地址并返回。
- 相同點和不同點:
都是返回指向變量的地址
new()不支持初始化變量的值(默認值都是零),&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簡介及使用方式
- make() 只作用于創(chuàng)建slice、map、channel這三種,這三種類型本來就是引用類型。
- 使用方式:
make(Type, size, num) return Type
Slice := make([]int, 3, 5) // 生成一個int類型切片,初始長度:3,容量:5
Map := make(map[string]int,5) // 生成一個鍵string值int類型的字典,長度:5
Chan := make(chan int, 5) // 生成一個int類型的通道,長度:5
new和make使用場景
new || &Type 場景:
new() 變量類型里面的值,是零值,就可以,不需要動態(tài)變化,比如type struct 屬性全是鎖。&type 可以自定義初始化變量的值,也可以像new()一樣,默認生成值(零值),這樣做的好處,不用想c語言那樣,申請一個變量,在取地址,賦值給指針變量,簡化操作,注重實用。
make 使用場景:
使用map、silce、channel三種資源類型,自己通過這三種組合方式,定義的類型。