38.蛤蟆筆記go語言——進階

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

38.蛤蟆筆記go語言——進階

Go有指標,但是沒有指標運算。不能用指標變數遍曆字串的各個位元組。因此它們更象是引用而不是你所知道的來自於C的指標。指標非常有用。

Go同樣也垃圾收集,也就是說無須擔心記憶體配置和回收。

Go有兩個記憶體配置原語,new和make。它們應用於不同的類型,做不同的工作,可能有些迷惑人,但是規則很簡單。

用new分配記憶體

內建函數new本質上說跟其他語言中的同名函數功能一樣:new(T)分配了零值填充的T類型的記憶體空間,並且返回其地址,一個*T類型的值。用Go的術語說,它返回了一個指標,指向新分配的類型的零值。有一點非常重要:new返回指標。

這意味著使用者可以用new 建立一個資料結構的執行個體並且可以直接工作。

用make分配記憶體

回到記憶體配置。內建函數make(T,args)與new(T)有著不同的功能。它只能建立slice,map和channel,並且返回一個有初始值(非零)的T類型,而不是*T。本質來講,導致這三個類型有所不同的原因是指向資料結構的引用在使用前必須被初始化。

make返回初始化後的(非零)值。

務必記得make僅適用於map,slice和channel,並且返回的不是指標。應當用new獲得特定的指標。

new(T)返回*T指向一個零值T

make(T)返回初始化後的T

定義自己的類型

Go允許定義新的類型,通過保留字type實現

type foo int

建立了一個新的類型foo作用跟int一樣。建立更加複雜的類型需要用到struct保留字。這有個在一個資料結構中記錄某人的姓名(string)和年齡(int)

package main

import "fmt"

type NameAge struct {

         namestring

         age  int

}

 

func main() {

         a :=new(NameAge)

         a.name= "Pete"

         a.age =42

         fmt.Printf("%v\n",a)

}

執行:

         &{Pete42}

轉換

有時需要將一個類型轉換為另一個類型。在Go中可以做到,不過有一些規則。首先,將一個值轉換為另一個是由操作符(看起來像函數:byte())完成的,並且不是所有的轉換都是允許的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

聯繫我們

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