golang中new和make總結(jié)

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三種資源類型,自己通過這三種組合方式,定義的類型。

歡迎吐槽,??
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容