Go語言學習筆記(語法篇) - 控制結構

Go語言的控制結構比Java、C語言都要少,只有很簡單的幾個,語法與也略有不一樣。

數組

Go語言的保留關鍵字

break     default     func     interface     select
case     defer     go     map     struct
chan     else     goto     package     switch
const     fallthrough     if     range     type
continue     for     import     return     var

學習

運算符

* / % << >> & &^ + - | ^ && || ! 優化

if

if中的條件不須要用中括號()給包含起來。 spa

a := 1
b := 2
c := 3
if a < b && b < c {
    fmt.Println(true)
} else {
    fmt.Println(false)
}

並且if接受初始化語句,初始化的變量爲一個局部變量。 code

if f, err := os.Open("c:/hello.go"); err == nil {
    fmt.Println(f.Name())
} else {
    fmt.Println(err)
}

goto

在Java裏這是一個保留關鍵字,但沒有任何實際做用。goto用很差容易形成程序的邏輯混亂。下面用Lable標識一個標籤,goto能夠將執行跳轉到這個標籤位置,注意標籤是大小寫敏感的。

func myfunc() {
    i := 0
Lable:
    fmt.Println(i)
    i++
    if i < 10 {
        goto Lable
    }
}

for

Go中沒有while,do while循環,只有一個for,不過卻能夠完成各類靈活循環操做,一樣也不須要中括號包含。
依舊有break,continue關鍵字,用法和其它語言同樣。 索引

func main() {
    //跟Java類似的for循環
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    //與While同樣
    for false {
	
    }
    /死循環
    for {
	
    }  
Here:
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
	    fmt.Println(j)
	    if j > 5 {
	        break Here
	    }
        }
    }
}

range

range能夠用於對集合的循環,集合後面在繼續學習,先看一下用range來遍歷數組。 編譯器

var ss []string = []string{"aaa", "bbb", "ccc", "ddd"}
    for i, v := range ss {
        fmt.Printf("索引是%d, 值是:%s\n", i, v)
    }


switch

Go的switch很靈活,不必定非要用常量,還支持表達式,下面一組代碼片段是判斷常量的。 string

func main() {
    i := 0
    switch i {
    case 0:
        //若是不加這個關鍵字,若是i等於0不會進到下面的case 1中
        fallthrough
    case 1:
        fmt.Println(111)
    }
}
func main() {
    ch := 'b'
    switch ch {
    //多個值用逗號分隔
    case 'a', 'b', 'c':
        fmt.Println(111)
    default:
        fmt.Println(222)
    }
}
下面這段代碼是 case表達式的
func main() {
    i := 10
    switch {
    case i < 10:
        fmt.Println(111)
    case i < 20:
        fmt.Println(222)
    default:
        fmt.Println(333)
    }
}
很是靈活、強大的switch,可是也給我帶來一個疑問,Go的編譯器怎麼對switch進行編譯優化呢,假如說一個switch其中有幾百甚至上千個case,起不是要按照順序一個一個去匹配,時間複雜度就變成O(N)了,常量的switch好處就是能夠讓時間複雜度變成O(1)
相關文章
相關標籤/搜索