freeCodeCamp/guide/english/go/switch/index.md

3.2 KiB

title
Switch in Go

Switch in Go

Go's switch statement is an alternative to if. It uses the following syntax:

fruit := "apple"
switch fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
    case "apple":
        fmt.Printf("Red and round.")
    case "lemon":
        fmt.Printf("Yellow and round.")
}

This program's output would be Red and round..

First, we declare the variable fruit as apple. Then we use the fruit variable as the condition expression. Go compares the value of fruit with the cases provided like this:

  • fruit == "banana" (false)
  • fruit == "apple" (true)

Notice lemon was not tested. After an evaluation returns true, no more cases are tried.

As with if, you can declare temporary variables on the switch`s condition expression:

switch fruit := "apple"; fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
    case "apple":
        fmt.Printf("Red and round.")
    case "lemon":
        fmt.Printf("Yellow and round.")
}

The variable fruit will not be accessible outside of the switch statement.

Default and other cases

Default

The default keyword is the fall back case when no other cases return true:

switch fruit := "grape"; fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
    case "apple":
        fmt.Printf("Red and round.")
    case "lemon":
        fmt.Printf("Yellow and round.")
    default:
        fmt.Printf("New fruit: %s!", fruit)
}

This program's output would be New fruit: grape!.

Same action for different values

A comma separated list of values to compare the condition expression value to, with the same action.

switch fruit := "lemon"; fruit {
    case "banana", "lemon":
        fmt.Printf("Yellow fruit.")
    default:
        fmt.Printf("This fruit is a color different than yellow.")
}

Output: Yellow fruit..

No expression

A switch with no expression means switch true. This is an alternate version to an else-if chain.

fruit := "banana"
switch {
    case fruit == "banana":
        fmt.Printf("Yellow and long.")
    default:
        fmt.Printf("This is not a banana.")
}

This evaluates true == (fruit == "banana"), simpliefied to true == true, which returns true.

Break

You can break code in a switch statement to skip any more code.

appleColor := "green"
switch fruit := "apple"; fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
    case "apple":
        if appleColor == "green" {
            fmt.Printf("This apple is green!")
            break
        }
        fmt.Printf("This apple is tasty!")
    case "lemon":
        fmt.Printf("Yellow and round.")
}

Output: This apple is green!.

Fallthrough

Skip to the next case, whether its condition evaluates to true.

switch fruit := "banana"; fruit {
    case "banana":
        fmt.Printf("Yellow and long.")
        fallthrough
    case "apple":
        fmt.Printf("Red and round.")
    case "lemon":
        fmt.Printf("Yellow and round.")
}

Output: Yellow and long. AND Red and round..