条件分岐と for ループ
1. if による条件分岐
1.1. if の基本構文
Go の if は他の言語と似ています。条件全体の括弧は通常省略しますが、複雑な式の一部を括弧で明確にできます。
age := 10
//1、加括号
if age > 18 {
fmt.Println("你已经成年了")
}
//2、不加括号
if (age > 18){
fmt.Println("你已经成年了")
}
1.2. if-else
age := 10
if age > 18 {
fmt.Println("你已经成年了")
} else {
fmt.Println("你还没有成年")
}
// else if
if age > 20 {
fmt.Println("你已经成年了")
} else if a18 > 16 {
fmt.Println("你已经成年了")
} else {
fmt.Println("你还没有成年")
}
2. for ループ
Go に独立した while 文はなく、for を使います。
2.1. for の基本構文
//基础写法
for i := 0; i < 10; i++ {
fmt.Println(i)
}
//注意不能加括号
//for循环代替while循环
var i int = 0
for {
if i > 10 {
break
}
fmt.Println(i)
i++
}
2.2. 例
2.2.1. 1 から 100 までの偶数を出力する
for i := 1; i <= 1--; i++{
if i % 2 == 0{
fmt.Println(i)
}
}
2.2.2. 九九の表を出力する
for i := 1; i <= 9; i++{
for j := 1; j <= i; j++{
fmt.Printf("%d * %d = %d\t", j, i, i * j)
}
fmt.Println()
}
2.3. range を使う
range は配列、スライス、文字列、map、channel などを反復します。得られる値は対象によって異なり、スライスならインデックスと要素、map ならキーと値、channel なら受信した値です。
name := "hello go, hello world"
for index, value := range name {
fmt.Printf("index = %d, value = %c\n", index, value)
}
for _, value := range name {
fmt.Printf("value = %c\n", value)
}
for index := range name {
fmt.Printf("index = %d\n", index)
fmt.Printf("value = %c\n", name[index])
}
注意:
2.4. ループを制御する
ループの制御には break と continue を使います。
continue は現在の反復の残りを省略し、次の反復へ進みます。
break はループを終了し、その後の処理へ進みます。
3. goto
goto はラベル付きの文へ移動します。無秩序な移動は可読性と保守性を下げるので、使用は慎重にします。
後処理やエラー処理をまとめる用途もありますが、通常の制御構造の方が分かりやすい場合が多いです。
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 5 {
goto over
}
fmt.Println(i, j)
}
}
//任意代码块
over:
fmt.Println("over")
//代码直接跳转到over代码块中运行
4. switch
switch は条件に応じて処理を分け、if-else の連続を置き換えられます。
各場合を読みやすく整理できます。
//基础写法
switch var1{
case val1:
...
case val2:
...
default:
...
}
//举例--中文的星期几,输出对应的英文
day := "星期一"
switch dat{
case "星期一":
fmt.Println("Monday")
case "星期二":
fmt.Println("Tuesday")
case "星期三":
fmt.Println("Wednesday")
case "星期四":
fmt.Println("Thursday")
case "星期五":
fmt.Println("Friday")
case "星期六":
fmt.Println("Saturday")
case "星期日":
fmt.Println("Sunday")
default:
fmt.Println("Unknown")
}
siwtch {
case day == "星期一":
fmt.Println("Monday")
case day == "星期二":
fmt.Println("Tuesday")
case day == "星期三":
fmt.Println("Wednesday")
case day == "星期四":
fmt.Println("Thursday")
case day == "星期五":
fmt.Println("Friday")
case day == "星期六":
fmt.Println("Saturday")
case day == "星期日":
fmt.Println("Sunday")
default:
fmt.Println("Unknown")
}
score := 90
switch {
case score >= 90:
fmt.Println("A")
case score >= 80:
fmt.Println("B")
case score >= 70:
fmt.Println("C")
case score >= 60:
fmt.Println("D")
default:
fmt.Println("E")
}
Go の case は自動的に次の case へ進みません。終了のための break は不要で、次へ進める場合は fallthrough を明示します。
