Go語言學習筆記1 變量,類型以及賦值

1.變量

1.1 聲明變量

使用var關鍵字能夠建立一個指定類型的變量:express

var i int = 0
var i = 0
var i int

以上三個表達式均是合法的,第三個表達式會將i初始化爲int類型的零值,0;若是i是bool類型,則爲false;i是float64類型,則爲0.0;i爲string類型,則爲"";i爲interface類型,則爲nil;i爲引用類型,則爲nil;若是i是struct,則是將struct中全部的字段初始化爲對應類型的零值。ide

能夠在同一條語句中聲明多個變量:函數

var i, j, k int                 // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string

 

包內可見的變量在main函數開始執行以前初始化,本地變量在函數執行到對應的聲明語句時初始化。oop

變量也能夠經過函數的返回值來初始化:spa

var f, err = os.Open(name) // os.Open returns a file and an error  

1.2 短聲明

在函數內部,有一種短聲明的方式,形式是name := expression,這裏,變量的類型是由編譯器自動肯定的。指針

anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
t := 0.0

由於這種形式很是簡潔,所以在函數內部(本地變量)大量使用。若是須要爲本地變量顯式的指定類型,或者先聲明一個變量後面再賦值,那麼應該使用varcode

1 i := 100                  // an int
2 var boiling float64 = 100 // a float64
3 var names []string
4 var err error
5 var p Point

就像var聲明同樣,短聲明也能夠並行初始化blog

i, j := 0, 1  

要謹記的是,:=是一個聲明,=是一個賦值,所以在須要賦值的場所不能使用 :=ci

 

1 var i int  
2 i := 10//panic : no new variables on left side of :=  

 

能夠利用並行賦值的特性來進行值交換:編譯器

1 i, j = j, i // swap values of i and j  

有一點須要注意的:短聲明左邊的變量未必都是新聲明的!

1 in, err := os.Open(path1) //新聲明兩個變量:in, err  
2 //...  
3 out, err := os.Create(path2)   
4 /*由於err已經聲明過,所以這裏只新聲明一個變量out。 
5 雖然這裏使用:=,可是err是在上個語句聲明的,這裏僅僅是賦值*/  

並且,短聲明的左邊變量必須有一個是新的,若都是以前聲明過的,會報編譯錯誤:

1 f, err := os.Open(infile)  
2 // ...  
3 f, err := os.Create(outfile) // compile error: no new variables 

正確的寫法是這樣的:

1 f, err := os.Open(infile)  
2 // ...  
3 f, err = os.Create(outfile) // compile ok  

1.3 指針

 

  1. f, err := os.Open(infile)  
  2. // ...  
  3. f, err = os.Create(outfile) // compile ok
相關文章
相關標籤/搜索