網頁

2021/6/13

Golang switch case 用法

Go語言switch case用法如下。


Go的switch case寫法類似C或Java,差別在於Go只會執行符合的case,不像其他語言要用break結束否則會繼續往下執行其他case。

下面用rand.Intn(3)隨機產生0-3的數n,然後用switch case依照n 的數值決定印哪種顏色。

main.go

package main

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().UnixNano()) // 使用現在時間產生rand的種子
    n := rand.Intn(3) // 產生0-3的隨機數

    switch n {
    case 1:
        fmt.Println("red")
    case 2:
        fmt.Println("blue")
    case 3:
        fmt.Println("green")
    default:
        fmt.Println("black")
    }
}

執行時若產生的隨機值n為1則印出結果如下。

red

可以看到Go的switch case即使沒有break也只會執行符合case的程式不會繼續往下執行。

比對Java的switch case寫法。

Main.java

import java.util.Random;

public class Main {

    public static void main(String[] arges) {
        int n = new Random().ints(0, 3)
                .findFirst()
                .getAsInt();

        switch (n) {
            case 1:
                System.out.println("red");
            case 2:
                System.out.println("blue");
            case 3:
                System.out.println("green");
            default:
                System.out.println("black");
        }
    }
}

Java的switch case沒加上break結束每個case,所以當n值為1時印出以下。

red
blue
green
black

可以看到除了符合case被執行外,下面的其他case也被執行了。


Go若多個case都要執行同個邏輯,則可在一個case寫多個條件。

main.go

package main

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().UnixNano()) // 使用現在時間產生rand的種子
    n := rand.Intn(5) // 產生0-5的隨機數
    
    switch n {
    case 1, 2, 3:
        fmt.Println("white")
    case 4, 5:
        fmt.Println("red")
    default: 
        fmt.Println("black")
    }
}

另外Go的switch不提供值的時候,在case可以撰寫條件判斷式,相當於多個if else。

main.go

package main

import (
    "fmt"
    "math/rand"
    "time"
)
func main() {
    rand.Seed(time.Now().UnixNano()) // 使用現在時間產生rand的種子
    n := rand.Intn(100) // 產生0-100的隨機數
    switch { // switch沒有判斷值
    case n < 60:
        fmt.Println("Bad")
    case n >= 60 && n < 70:
        fmt.Println("OK")
    case n >= 70 && n < 90:
        fmt.Println("Good")
    case n >= 90:
        fmt.Println("Perfect")
    }
}

除了上述判斷值的switch還有另一種判斷型態的「type swtich


沒有留言:

張貼留言