囲碁の「スイッチ」声明


switch文はプログラミングにおいて重要な概念であり,条件実行のために使用される.Goのswitch文は他のプログラミング言語に比べて少し違います.したがって、このブログでは、意味のある例の助けを借りてgoのswitch文を理解するつもりです.

始める
次の例を見てみましょう
package main
import "fmt"
func main() {
    fruit := "Orange"
    switch fruit {
    case "Apple":
        fmt.Printf("%v is a nice fruit\n", fruit)
    case "Mango":
        // We can have multiple lines of code inside case
        out := fmt.Sprintf("%v is a nice fruit", fruit)
        fmt.Println(out)
    case "Guava":
        // By default there's NO fall through
        fmt.Printf("%v is a nice fruit\n", fruit)
    case "Orange":
        fmt.Printf("%v is a nice fruit\n", fruit)
    default:
        fmt.Println("Unrecognized fruit")
    }
}
上記のコードスニペットの出力を推測できますか?あなたが他のプログラミング言語でswitch文を使用したならば、あなたはおそらく以下を推測しました
Mango is a nice fruit
Mango is a nice fruit
Mango is a nice fruit
Unrecognized fruit
しかし、それはgoの場合ではありません.ここではswitch文では、デフォルトではフォールアウトしていません(基本的には、該当する場合はすべてのケースを実行することを意味します).goでは、一致した場合の文だけが実行されるので、出力は単にMango is a nice fruit .
注意:switch expression == case expression 有効な比較でなければならないので、以下のコードはエラーを与えます.
package main
import "fmt"
func main() {
    num := "Two"
    switch num {
    case 2:
        fmt.Printf("Num is 2")
    default:
        fmt.Println("Num is not 2")
    }
}

使用fallthrough私たちが何をしたいのかについては、そのためには、fallthrough キーワード.したがって、以下のコードは、我々が以前に推測した出力を与えます.
package main
import "fmt"
func main() {
    fruit := "Mango"
    switch fruit {
    case "Apple":
        fmt.Printf("%v is a nice fruit\n", fruit)
    case "Mango":
        out := fmt.Sprintf("%v is a nice fruit", fruit)
        fmt.Println(out)
        fallthrough
    case "Guava":
        fmt.Printf("%v is a nice fruit\n", fruit)
        fallthrough
    case "Orange":
        fmt.Printf("%v is a nice fruit\n", fruit)
        fallthrough
    default:
        fmt.Println("Unrecognized fruit")
    }
}
指定しなければならないことに注意してくださいfallthrough 複数の回だけ出力を取得するので、Fallthroughは次のケースブロックを実行します(ブロックが真か偽かに関係なく)、すべての以降のケースブロックを実行します.
また、他のプログラミング言語と同様にdefault ケースはオプションで、他のいかなるケースもマッチしないときに引き起こされます(デフォルトのケースは、まさしくまさしくその底で必ずしもそうではありません)

複数の式
コンマで区切られた複数の式を持つこともできます.case式のいずれかがスイッチ式に一致する場合、その特定のケースに関連付けられたステートメントが実行されます.
package main
import "fmt"
func main() {
        fruit := "Onion";
    switch fruit {
    case "Apple", "Mango", "Guava":
        fmt.Println("Fruit")
    case "Potato", "Cabbage", "Onion":
        fmt.Println("Vegetable")
    default:
        fmt.Println("What is it?")
    }
}
// OUTPUT
// Vegetable
今まで私はスイッチとケース式でリテラル値を使用していますが、それは唯一の可能性ではありません.以下の例を見てみましょう
package main
import "fmt"
func main() {
    fruit := "Onion"
    switch fruit + "s" {
    case "Apple" + "s", "Mango" + "es":
        fmt.Println("Fruits")
    case "Cabbage" + "s", "Onion" + "s":
        fmt.Println("Vegetables")
    default:
        fmt.Println("What is it?")
    }
}
// OUTPUT
// Vegetables

スイッチ初期化器
次のように、スイッチ初期化子を持つこともできます.
package main
import "fmt"
func main() {
    switch fruit := "Onion"; fruit{
    case "Apple", "Mango":
        fmt.Println("Fruit")
    case "Cabbage", "Onion":
        fmt.Println("Vegetable")
    default:
        fmt.Println("What is it?")
    }
}
現在変数fruit スイッチブロック内でのみ使用できます.main 関数.

無表情スイッチ
スイッチを入れる式を指定しないと、デフォルト値はブール値true そして現在、プログラムはtrue そしてこれはif-else-if-else チェーン.
package main
import "fmt"
func main() {
    for i := 1; i <= 30; i++ {
        switch {
        case i%15 == 0:
            fmt.Println(i, "Baz")
        case i%3 == 0:
            fmt.Println(i, "Foo")
        case i%5 == 0:
            fmt.Println(i, "Bar")
        default:
            // default is optional
            fmt.Println(i)
        }
    }
}

型スイッチ
型スイッチは値よりむしろ型を比較します.それ以外の式スイッチに似ています.次の例を見てください.
package main
import "fmt"
func main() {
    var num interface{} = "Hello, World"
    switch num.(type) {
    case int:
        fmt.Printf("num is of type int")
    case bool:
        fmt.Printf("num is of type bool")
    case string:
        fmt.Printf("num is of type string")
    }
}
// OUTPUT
// num is of type string
それで、私たちが今、スイッチ文がどのように働いているかについての明確な理解があることを願っています.