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の条件は中括弧()で含める必要はありません.
a := 1
b := 2
c := 3
if a < b && b < c {
    fmt.Println(true)
} else {
    fmt.Println(false)
}

またifは初期化文を受け入れ,初期化変数は局所変数である.
if f, err := os.Open("c:/hello.go"); err == nil {
    fmt.Println(f.Name())
} else {
    fmt.Println(err)
}

gotoはJavaでキーワードを保持していますが、実際の役割はありません.gotoがうまくいかないとプログラムの論理が混乱しやすい.次にLabelでラベルを識別し、gotoは実行をこのラベルの位置にジャンプすることができ、ラベルが大文字と小文字に敏感であることに注意します.
func myfunc() {
    i := 0
Lable:
    fmt.Println(i)
    i++
    if i < 10 {
        goto Lable
    }
}

for
Goにはwhile,do whileループはなく,forは1つしかありませんが,様々な柔軟なループ操作を完了することができ,同様に中括弧を含める必要はありません.依然として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
", i, v)     }

switch
Goのswitchは柔軟で、定数を使う必要はありません.式もサポートされています.次のコード断片のセットは定数を判断します.
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をコンパイルして最適化しているのか疑問を持ってきました.もし1つのswitchの中に数百以上のcaseがあるとしたら、順番に1つずつマッチングするのではなく、時間の複雑さはO(N)になります.定数のswitchのメリットは、時間の複雑さをO(1)にすることができます.