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 」
沒有留言:
張貼留言