學習的理由
- 簡單
- 編譯快
- 部署,運行簡單
- 很多區塊鏈開源項目使用go語言開發
- 學習應該是碼農的本能
Hello World
<code>package main import "fmt" func main() { fmt.Printf("hello world") }/<code>
hello world的代碼看上去還好,比java簡潔,和python一樣語句不用分號來結束。
變量
<code>var i int = 0/<code>
上面是一個最完整的變量聲明語句,這個看著就稍微有點奇怪了,有點像javascript,後面又多了個類型聲明,習慣了java裡類型聲明在前面,或者像javascript,python一樣沒有類型聲明。
不過就如剛才所說,上面是一個最完整的變量聲明語句,實際還可以這樣聲明使用:
<code>var i = 0 var msg = "hello, world"/<code>
嗯,這還差不多,很javascript了。變量的類型由變量的初始化值決定。
還可以更簡單嗎?
<code>i := 0 msg := "hello, world"/<code>
嘖嘖,nice!不過注意,這種寫法是聲明變量的同時進行初始化,當已經寫過一個i := 0時,後面就不能再來個i := 1了,因為這樣表示聲明瞭兩個變量,名字都為i,:=在這裡是聲明變量且賦值初始化。
再來個驚歎的:
<code>x, y := 1, 2 x, y = y, x/<code>
上面的兩個語句做了什麼?第一行是聲明並初始化了兩個整型變量x和y,第二行把x和y的值對調!對調兩個變量的值竟然可以這麼簡單!對比下java的版本:
<code>int x = 1; int y = 2; int tmp = x; x = y; y = tmp;/<code>
條件分支
<code>i := 10 if i < 1 { fmt.Println("i < 1") } else if i >= 1 && i < 5 { fmt.Println("i >= 1 && i < 5") } else { fmt.Println("i >= 5") } lang := "go" switch lang { case "go": fmt.Println("go is best") case "java": fmt.Println("java is best") case "python": fmt.Println("python is best") default: fmt.Println("go is best") }/<code>
條件分支看起來就差不多了,和java相比省略了括號,別的差不多。
循環
for
<code>for i := 0; i < 5; i++ { fmt.Println("go語言的for循環長這樣") }/<code>
for循環看起來也差不多,和java相比,少了括號。
range
<code>word := []string{"h", "e", "l", "l", "o"} for index, char := range word { fmt.Println(index, char) } for _, c := range word { fmt.Println(c) } for i, _ := range word { fmt.Println(i) } for i := range word { fmt.Println(i) }/<code>
關於range,可以用來遍歷數組,列表,鍵值對,這裡僅以數組為例說明。
當對數組使用range時,會返回兩個變量,第一個變量是數組的索引,第二個變量是數組對應索引的值。
這和java裡的for ... in ...有點像,但這個支持取索引,和javascript中的each也挺像。
上面第二個for寫法第一個變量是一個下劃線,表示對index不感興趣,這裡就用下劃線來佔位。
類似,第三個for對value不感興趣,就把value用下劃線來佔位。
第四個for其實效果和第三個for一樣,如果只寫一個變量,默認是index。
while
<code>for { fmt.Println("go語言很奇葩,沒有while") } i := 1 for i <= 5 { fmt.Printf("%d:go語言很奇葩,沒有while\n", i) i++ } i = 1 for true { if i > 5 && 1 > 0 { break } fmt.Printf("%d:go語言很奇葩,沒有while\n", i) i++ }/<code>
go語言很奇葩,竟然沒有while,上面的三個for分別對應java裡的:
<code>while (true) { //xxx; } while (i <= 5) { //xxx; } while (true) { if (i > 5 && 1 > 0) { break; } //xxx; }/<code>
結語
go語言的初體驗先到此為止,語法上確實有它簡單的地方,也有它奇葩的地方,看看,寫寫,跑跑,go語言之路走起。