這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
變數
變數聲明
通過關鍵字var聲明變數,資料類型在變數名後。
var a intvar b int = 10
變數聲明語句可以不需要使用分號作為結束符。
可以將若干個需要聲明的變數放置在一起,避免重複寫var關鍵字。
var ( a int b string)
初始設定變數
初始設定變數時可以不用聲明資料類型,go編譯器會根據運算式右值推匯出該聲明為哪種類型。
var a int = 10var a = 10
可以使用 := 操作符,用於明確表達同時進行變數聲明和初始化工作,可以減少寫關鍵字var跟資料類型。
變數賦值
go支援多重賦值
var ivar ji, j = j, i
這樣就可以減少引入一個中間變數。
var t = i;var i = j;var j = t;
匿名變數
在函數返回多個值,但只希望擷取個別傳回值的情況下,可以使用匿名變數,這樣就可以省去定義沒用的變數。
func GetName() (firstName, lastName, nickName string) { return "May", "Chan", "Chibi Maruko"}
取nickName的值,可以寫成下面的寫法
_, _, nickName := GetName()
使用匿名變數的好處是可以大幅降低溝通的複雜度和代碼維護的難度。
常量
常量是在編譯期間就已知且不能改變的值。(整形、浮點型、複數型)
在Go中,以大寫字母開頭的常量在包外可見。
字面常量
go中的字面常量是無類型的,只要該常量在相應類型的範圍範圍內,就可以作為該類型的常量。
定義常量
使用const關鍵字聲明常量,定義常量的時候可以限定常量類型,但是非必需的,如果定義時沒有指定類型,那麼該常量與字面常量一樣是無類型的。
const Pi float64 = 3.14159265358979323846const zero = 0.0const ( size int64 = 1024 eof = -1)const a, b, c = 1, 2, "hello"
常量定義運算式的右邊的值可以是一個在編譯期的常量運算式,如:
const Mask = 1 << 3
但由於常量的賦值是一個編譯期行為,所以右值不能出現任何需要運行期才能得出結果的運算式,如:
const Home = os.GetEnv("HOME")
預定義常量
go內建的常量有true、false、iota;
iota是可以被編譯器修改的常量,在每一個const關鍵字出現時會被重設為0,然後在下一個const出現之前,沒出現一次iota,其值都會自增1。
const ( c0 = iota // c0 = 0 c1 = iota // c0 = 1 c2 = iota // c0 = 2)
如果兩個以上const的指派陳述式的運算式是一樣的,那麼刻意省略從第二個開始的賦值運算式,因為,上面的代碼可以簡寫為:
const ( c0 = iota // c0 = 0 c1 // c0 = 1 c2 // c0 = 2)