137 lines
3.2 KiB
Markdown
137 lines
3.2 KiB
Markdown
---
|
|
title: Switch in Go
|
|
---
|
|
|
|
# Switch in Go
|
|
|
|
Go's switch statement is an alternative to `if`. It uses the following syntax:
|
|
|
|
```go
|
|
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:
|
|
|
|
```go
|
|
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:
|
|
|
|
```go
|
|
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.
|
|
|
|
```go
|
|
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.
|
|
|
|
```go
|
|
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.
|
|
|
|
```go
|
|
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.
|
|
|
|
```go
|
|
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.`.
|