Go基礎語法整理(一)


  時間過的好快,轉眼端午已經過去兩天半了,今天在家里,靜下心,看看書,寫寫文章。這一段時間,我除了看Cowboy源碼,抽空看了下Go的基本語法,當然就是看之前在Ubuntu下使用Sublime Text 2搭建Go開發環境 這篇文章中跟大家推薦的《學習Go語言》0.4 中文版,今天抽空整理下基礎知識點,畢竟看跟實踐帶來的效果是不同的。

  變量、類型和保留字

  Go在語法上有着類C的感覺,一般情況下,你不需要使用分號,除非你將兩個(或更多)語句放在一行書寫。

  Go和ActionScript3一樣,變量的類型在變量名的后面,例如:

  C#是: int a; 而Go則是 var a int; 如果一行只有一個語句,則;可以不加。

  默認值:當定義了一個變量,則它的默認值為其類型的null值,例如:

package main

import (
    "fmt"
)

func main() {
    // 例子1
    var a int
    var b string

    fmt.Printf("a = %d\n", a)
    fmt.Printf("b = %s\n", b)
}

  運行結果如下:

  

  從例子中,我們可以明白,在var a int后,a的值為0;var b string,意味着b被賦值為零長度的字符串,也就是""。

  聲明和賦值:在Go中,聲明和賦值是兩過程,但是可以連在一起,在Go中有兩種方式,如下:

package main

import (
    "fmt"
)

func main() {

    // 例子2
    var x int
    x = 20

    y := 20

    fmt.Printf("x = %d\n", x)
    fmt.Printf("y = %d\n", y)

    // 例子3
    var (
        q int
        k bool
    )

    q = 20
    k = false

    // 例子4
    //q, k := 20, false

    fmt.Printf("q = %d\n", q)
    fmt.Println("k =", k)
}

  運行結果如下:

  

  我們看,例子2中,使用保留字 var 聲明變量x,然后賦值20給它;而變量y,則使用另一種方式 := ,使得在一步內完成了聲明和賦值(這一形式只能在函數內使用),這種情況下,變量的類型是由值推演出來的,值20表示是int類型,值false告訴Go它的類型應該是bool。:= 在函數外使用,也就是全局變量,會提示如下錯誤:

  

  例子3是多個var聲明可以一起完成;同樣的例子4,則是多個變量,可以使用平行賦值。2個例子的結果是一致的。

  特殊變量 _ ,任何賦給它的值都被丟棄,例子如下:

    // 例子5
    _, r := 34, 35

    fmt.Printf("r = %d\n", r)

  在這個例子中,將35賦值給r,同時丟棄34。

  Go 的編譯器對聲明卻未使用的變量在報錯,測試如下:

  

  布爾類型

  布爾類型表示由預定義的常量 true 和 false 代表的布爾判定值。布爾類型是 bool。

  數字類型

  Go 有眾所周知的類型如 int,這個類型根據你的硬件決定適當的長度。意味着在 32 位硬件上,是 32 位的;在 64 位硬件上是 64 位的。注意:int 是 32 或 64 位之一,不會定義成其他值。uint 情況相同。

  如果你希望明確其長度,你可以使用 int32 或者 uint32。完整的整數類型列表(符號和無符號)是 int8,int16,int32,int64 和 byte,uint8,uint16,uint32,uint64。byte是 uint8 的別名。浮點類型的值有float32 和 float64 (沒有 float 類型)。64 位的整數和浮點數總是 64 位的,即便是在 32 位的架構上。

  例子如下:

    // 例子5
    _, r := 34, 35

    fmt.Printf("r = %d\n", r)

    fmt.Println(reflect.TypeOf(r).Size())

  很遺憾,這里輸出的是 4。可是我機器是64位ubuntu,不是應該輸出8嗎?這里我使用的是 go build file.go 方式編譯,會不會是編譯問題,我嘗試使用 6g 6l 方式編譯:

  

  可惜結果,依然是4,我又嘗試了下,下面這個例子:

    var a64 int64;
    fmt.Println(reflect.TypeOf(a64).Size())

  這里輸出的是 8。

  這里我得出的結論是不管是32還是64位機器,int都是32位的,跟文檔上的不同。

  Go浮點類型的值有 float32 和 float64 (沒有 float 類型),例子如下:

    var o32 float32
    o32 = 3.5
    fmt.Println(reflect.TypeOf(o32).Size())

    var o64 float64
    o64 = 3.5
    fmt.Println(reflect.TypeOf(o64).Size())

  這里輸出 4 和 8。

  需要留意的是這些類型全部都是獨立的,並且混合用這些類型向變量賦值會引起編譯器錯誤:

  

  最后,說明下,這篇文章,有大量摘抄自mikespook翻譯的《學習Go語言》中文版的文字,因為都是基礎的語法,所以建議大家看下這本電子書。

  今天就先分享到這里,謝謝大家的耐心觀看。

  補充:

  http://golang.org/doc/go_faq.html#q_int_sizes

  關於 int 在 64位系統下,也是 4位的說明,上面是官方的FAQ。這邊感謝@張景埕的幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM