這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
與c文法不同之處:
1. 參數列表中各個參數類型相同時可以唯寫出最後一個,如:add(x, y int) int { return x +y } 2. 類型在參數名(變數/函數)後面 3. 函數的左大括弧要跟函數名同一行,否則編譯不過 4. 函數定義要先寫關鍵字func在函數開頭(函數外的每個語句都要以func、var等等關鍵字開頭) 5. 在包或者函數層級聲明變數時要用var語句 6. 函數支援多值返回,如:func swap(x, y string) (string, string) { return y,x } 7. 函數支援命名傳回值,如func split(x int) (x, y int) { ... return} 8. 初始化使用運算式時可以不用寫類型,由初始值推匯出類型 9. 可以用 :=實現變數簡捷複製,不需要加var,但僅能在函數內部使用 10.fmt.Printf格式化輸出:%T輸出變數類型,%q輸出帶雙引號的字串,%v輸出結構類型 11.不同類型變數的賦值需要顯示類型轉換 12.常量定義要使用const,不能使用 :=,聲明兩個const變數可以const(x=1; y=2) 13.條件控制語句不加小括弧(if、for、switch等) 14.for迴圈前置、後置語句可以為空白,如for sum < 1000 {...},格式類似c中的while,for的迴圈條件為空白時是死迴圈 15.if語句後可以加一個便捷語句,如if v:=41; sum<lim{...},if便捷語句中聲明的變數只在if語句及else語句中有效 16.switch...case...在匹配成功的時候會停止,不需要像c那樣顯示break,沒有條件的switch語句等同於switch true,用於更清晰的表達if-then-else 17.defer關鍵詞,延緩語句執行,直到上層函數返回,延遲的函數會被壓入棧中,後進先出 18.go有指標,但沒有指標運算,通過指標訪問結構體成員時用點操作符,指標是透明的 19.通過Name:文法可以只列出部分欄位,其餘欄位為零值 20.由make建立slice b := make([]int, 0, 5) // len(b)=0, cap(b)=5,make的參數包括長度和容量,slice的零值是nil,一個nil的slice長度和容量都是0 21.go中若有聲明但未使用的變數時編譯會報錯,用_來做變數名就可以了 22.go中沒有類,但是可以在包內任意類型定義方法(不包括基礎類型) 23.方法可以與命名類型或者命名類型的指標相關聯,接收者為指標有兩個好處:第一,避免在方法調用中拷貝值,第二,可以修改接收者指向的值 24.介面類型是由一組方法定義的類型的集合,介面類型的值可以存放實現這些方法的任何值 25.本地查看go語言官方文檔,godoc -http=:8011(連接埠號碼自己指定),然後瀏覽器開啟http://localhost:8011就可以了