go語言入門初體驗

go語言入門初體驗

Unix 詞雲


學習的理由

  1. 簡單
  2. 編譯快
  3. 部署,運行簡單
  4. 很多區塊鏈開源項目使用go語言開發
  5. 學習應該是碼農的本能

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語言之路走起。


分享到:


相關文章: