← 記事一覧へ

Go 学習記録(6):条件分岐とループ

Go 基礎学習の第 6 回。文法、実例、学習の過程を記録します。

条件分岐と 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])
}

注意: go

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 を明示します。

この記事の日付について

旧サイトに記載された日付を保持しています。実際に書き始めた時期は、これより早い可能性があります。

同じシリーズ · Go の基礎学習

前の記事Go 学習記録(5):文字列 ←次の記事Go 学習記録(7):配列・スライス・map・リスト →