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

137 lines
3.2 KiB
Markdown
Raw Normal View History

2018-10-12 19:37:13 +00:00
---
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.`.