Go言語学習ノート(文法編)-制御構造
2617 ワード
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の条件は中括弧()で含める必要はありません.
またifは初期化文を受け入れ,初期化変数は局所変数である.
gotoはJavaでキーワードを保持していますが、実際の役割はありません.gotoがうまくいかないとプログラムの論理が混乱しやすい.次にLabelでラベルを識別し、gotoは実行をこのラベルの位置にジャンプすることができ、ラベルが大文字と小文字に敏感であることに注意します.
for
Goにはwhile,do whileループはなく,forは1つしかありませんが,様々な柔軟なループ操作を完了することができ,同様に中括弧を含める必要はありません.依然としてbreak、continueキーワードがあり、使い方は他の言語と同じです.
range
rangeは集合のループに用いることができ,集合の後で学習を続け,まずrangeで配列を遍歴することを見る.
switch
Goのswitchは柔軟で、定数を使う必要はありません.式もサポートされています.次のコード断片のセットは定数を判断します.
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)にすることができます.