[Go] --- 指標和記憶體配置

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Email : hahayacoder@gmail.com

 

1 Go語言中的指標和C語言中在使用上幾乎沒有什麼差別,熟悉C語言應該很容易掌握,下面是Go語言中使用指標的代碼

package mainimport "fmt"func main() {    var value int = 1    //指向int型的指標    var pInt *int = &value    //列印相關資訊fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt)    //通過指標修改指標指向的值    *pInt = 222fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt)    //使指標指向別的地址    var m int = 123    pInt = &m    fmt.Printf("value = %d \n pInt = %d \n *pInt = %d \n", value, pInt, *pInt)}


 

2 Go語言中有兩個分配記憶體的機制,分別是內建的函數new和make。但是new和make並不能等同,他們所做的事情其實並不同,所應用到的類型也不相同,應用情境也不相同,但是在區分在何時使用new和make卻有一個簡單的規則
 
3 new(T)函數是一個分配記憶體的內建函數,但是不同於其他語言中內建new函數所做的工作,在Go語言中,new只是將記憶體清零,並沒有初始化記憶體。所以在Go語言中,new(T)所做的工作是為T類型分配了值為零的記憶體空間並返回其地址,即返回*T。也就是說,new(T)返回一個指向新分配的類型T的零值指標
即:var pInt *int = new(int) //*pInt = nil
 
4 make(T, args)函數與new(T)函數的目的不同。make(T, args)僅用於建立切片、map和channel(訊息管道),make(T, args)傳回型別T的一個被初始化了的執行個體。而new(T)返回指向類型T的零值指標。也就是說new函數返回的是*T的未初始化零值指標,而make函數返回的是T的初始化了的執行個體
 
5 Go語言中出現new和make兩個分配記憶體的函數,並且使用起來還有差異,主要原因是切片、map、channel這三種類型在使用前必須初始化相關的資料結構。例如,切片是一個有三項內容的資料類型,包括指向資料的指標(在一個數組內部進行切片)、長度和容量,在這三項內容被初始化之前,切片值為nil。換句話說:對於切片、map、channel,make(T, args)初始化了其內部的資料結構並為他們準備了將要使用的值
例如:make([]int, 10, 100); //分配一個整形數組,長度為10,容量為100,並返回其前10個數組的切片
 
6 下面通過一個簡單的例子來說明Go語言中new函數和make函數的差別
package mainimport "fmt"func main() {    //使用new為切片分配記憶體 但是返回的是零值指標     //接著還是用使用make初始化 不必要的使問題複雜化 所以幾乎不這樣使用    var p *[]int = new([]int) //*p = nil    fmt.Println(p)        //輸出&[]fmt.Println(*p)        //輸出[]    //使用make為切片分配記憶體 在為切片分配記憶體時一般使用這種方法    var v []int = make([]int, 10)    fmt.Println(v)        //輸出[0 0 0 0 0 0 0 0 0 0 0]}


 

7 通過上面的例子得出,在為切片、map、channel這三種類型分配記憶體時,為了不必要的使問題複雜化,應該使用Go的內建make函數

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.