go語言中var

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

go語言中定義變數使用關鍵字var,如:var x int=4

也可以寫成x:=4;

在函數中,:= 簡潔指派陳述式在明確類型的地方,可以用於替代 var 定義。

:= 結構不能使用在函數外,函數外的每個文法塊都必須以關鍵字開始。)

package mainimport (       "fmt")func main() {    var x int = 4    fmt.Println(x)//輸出4    fmt.Println(&x)//輸出指標    //fmt.Println(*x) //錯誤    y := 4        fmt.Println(y)//輸出4    fmt.Println(&y)//輸出指標    //fmt.Println(*y) //錯誤   var v *int = new(int)//傳回值為指標    fmt.Println(*v)//輸出為0,它只是將記憶體清零,而不是初始化記憶體*v = 4//賦值    fmt.Println(v)//輸出指標    fmt.Println(*v)//輸出4    z := new(int)//代替var v *int = new(int)    *z = 3    fmt.Println(z)//輸出指標    fmt.Println(*z)//輸出3}
總結go語言的變數定義傳回值中隱含了指標,可以進行取指標操作,不嫩進行取值操作。
new和make的區別(轉)

記憶體配置

new 是一個分配記憶體的內建函數,但不同於其他語言中同名的new所作的工作,它只是將記憶體清零,而不是初始化記憶體。new(T)為一個類型為T的新項目分配了值為零的儲存空間並返回其地址,也就是一個類型為*T的值。用Go的術語來說,就是它返回了一個指向新分配的類型為T的零值的指標

make(T, args)函數的目的與new(T)不同。它僅用於建立切片、map和chan(訊息管道),並傳回型別T(不是*T)的一個被初始化了的(不是)執行個體。這種差別的出現是由於這三種類型實質上是對在使用前必須進行初始化的資料結構的引用。例如,切片是一個具有三項內容的描述符,包括指向資料(在一個數組內部)的指標、長度以及容量,在這三項內容被初始化之前,切片值為nil。對於切片、映射和通道,make初始化了其內部的資料結構並準備了將要使用的值。如:

下面的代碼分配了一個整型數組,長度為10,容量為100,並返回前10個數組的切片

make([]int, 10, 100)

以下樣本說明了newmake的不同。

var p *[]int = new([]int)   // 為切片結構分配記憶體;*p == nil;很少使用var v  []int = make([]int, 10) // 切片v現在是對一個新的有10個整數的數組的引用 // 不必要地使問題複雜化:var p *[]int = new([]int)fmt.Println(p) //輸出:&[]*p = make([]int, 10, 10)fmt.Println(p) //輸出:&[0 0 0 0 0 0 0 0 0 0]fmt.Println((*p)[2]) //輸出: 0 // 習慣用法:v := make([]int, 10)fmt.Println(v) //輸出:[0 0 0 0 0 0 0 0 0 0]
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.