這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。日期:2014年7月19日
1、Go 在文法上有著類 C 的感覺。如果你希望將兩個(或更多)語句放在一行書寫,它們 必須用分號分隔。一般情況下,你不需要分號。
2、Go 同其他語言不同的地方在於變數的類型在變數名的後面。例如:不是,int a,而是 a int。當定義了一個變數,它預設賦值為其類型的 null 值。這意味著,在 var a int後,a 的 值為 0。而 var s string,意味著 s 被賦值為零長度字串,也就是 ""。
3、Go語言的變數聲明和賦值 在Go中使用var對變數進行聲明, 例如: var a int a = 15 var將變數a聲明為int型,然後通過=賦值。 當然在Go語言中,我們可以把聲明和賦值過程一步完成, 例如: a := 15(這一形式只可用在函數內) 在這種情況中,變數的類型是由值推演出來的,值15是int的類型的,推演出變數a為int類型。 使用var可以聲明一組變數, 例如:var ( a int b bool ) 如果變數的類型一致,還可以使用var a,b int 這種方式來聲明變數,當然還可以使用這種方式進行聲明和賦值:a,b := 20,16 在Go語言中有一個特殊的變數(_,即底線),任何賦給它的值都被丟棄,這將在一些地方變得很有用處。 需要注意的是,Go 的編譯器對聲明卻未使用的變數在報錯。 4、Go語言的類型 1)布爾類型(bool):值可以為true和false 2)數字類型:int,這個類型根據硬體決定,在32位機器上,int是32位的,在64位機器上,int是64位。uint也是如此。 當我們想要明確長度時,可以使用int32(uint32)。完整的整數類型列表(符號和無符號)是 int8,int16,int32,int64 和 byte,uint8,uint16,uint32,uint64。byte 是 uint8 的別名。浮點類型的值有 float32 和 float64 (沒有 float 類型)。64 位元的整數和浮點數總是 64 位元的,即便是在 32 位的架構上。需要留意的是這些類型全部都是獨立的,並且混合用這些類型向變數賦值會引起編譯器錯誤。 例如: var a int var b int32 a = 15 b = a + a//編譯器會報錯,提示(cannot use g + g (type int) as type int32 in assignment) 對於數字類型的賦值,可以使用八進位、十六進位或科學計數法:077,0xFF,1e3 或者 6.022e23 這些 都是合法的。 3)常量:constant ,常量在編譯時間被建立,只能是數字、字串或布爾值。 例如: const ( a = iota b = iota //iota是一個枚舉值,第一次使用時值為0,下一次使用時值就變為1,每一次使用值都會+1 ) const ( a = 0 b bool = true //明確指定常量的類型 ) 4)字串 字串賦值:s := "Hello World!" 字串在 Go 中是 UTF-8 的由雙引號(”)包裹的字元序列。如果你使用單引號(’)則 表示一個字元(UTF-8 編碼),這種在 Go 中不是 string 。一旦給變數賦值,字串就不能修改了:在 Go 中字串是不可變的。 那麼如何?改變字串這種操作呢?需要通過下面這種方式: s := "Hello,World!" m := []rune(s) m[0] = 'C' s2 := string(m) //實際上只是新建立了一個字串 fmt.Printf("%s\n", s2) 多行字串: s := "Starting part" + "Ending part" 會被轉換為: s := "Starting part" ; + "Ending part" ; 這是錯誤的文法,應當這樣寫: s := "Starting part" + "Ending part" Go 就不會在錯誤的地方插入分號。 還可以使用反引號來實現,s := `Starting part Ending part` 作為原始字串符,值 在引號內的字元是不轉義的。 5)rune rune是int32的別名,用 UTF-8 進行編碼。這個類型在什麼時候使用呢?例如需要 遍曆字串中的字元。可以迴圈每個位元組(僅在使用 US ASCII 編碼字串時與字元等 價,而它們在 Go 中不存在!)。因此為了獲得實際的字元,需要使用 rune 類型。 6)複數 Go 原生支援複數。它的變數類型是 complex128 (64 位元虛數部分)。如果需要小一些 的,還有 complex64 – 32 位的虛數部分。複數寫為 re + imi,re 是實數部分,im 是虛數部分,而 i 是標記 。 例如: var ss complex64 = 5 + 5i fmt.Printf("Value is: %v", ss) 列印結果: Value is: (5+5i) 7)錯誤 var e error定義了一個error類型的變數e,其的值是 nil。這個 error 類型是一個接 口。
5、Go語言的運算子 Go 支援普通的數字運算子,中列出了當前支援的運算子,以及其優先順序。它們 全部是從左至右結合的。 Go語言不支援運算子多載(或者方法重載),而一些內建運算子卻支援重載。例如 + 可以用於整數、浮點數、複數和字串(字串相加表示串聯它們)。 6、Go關鍵字 中列出了Go中所有的關鍵字,一些已經接觸過,另外一些將在後面介紹。