134 lines
3.3 KiB
Markdown
134 lines
3.3 KiB
Markdown
|
---
|
||
|
title: Switch in Go
|
||
|
localeTitle: Cambiar en go
|
||
|
---
# Cambiar en go
|
||
|
|
||
|
La declaración de cambio de Go es una alternativa a `if` . Utiliza la siguiente sintaxis:
|
||
|
|
||
|
```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.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
La salida de este programa sería `Red and round.` .
|
||
|
|
||
|
Primero, declaramos la `fruit` variable como `apple` . Luego usamos la variable `fruit` como la expresión de condición. Go compara el valor de la `fruit` con los `cases` proporcionados así:
|
||
|
|
||
|
* fruta == "plátano" (falso)
|
||
|
* fruta == "manzana" (verdadero)
|
||
|
|
||
|
Note que el `lemon` no fue probado. Después de que una evaluación devuelve verdadero, no se intentan más casos.
|
||
|
|
||
|
Como con `if` , puede declarar variables temporales en la expresión de condición del switch:
|
||
|
|
||
|
```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.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
La `fruit` variable no será accesible fuera de la instrucción switch.
|
||
|
|
||
|
## Predeterminado y otros casos
|
||
|
|
||
|
### Defecto
|
||
|
|
||
|
La palabra clave `default` es el caso alternativo cuando ningún otro caso devuelve verdadero:
|
||
|
|
||
|
```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)
|
||
|
}
|
||
|
```
|
||
|
|
||
|
La salida de este programa sería `New fruit: grape!` .
|
||
|
|
||
|
### Misma acción para diferentes valores.
|
||
|
|
||
|
Una lista de valores separados por comas para comparar el valor de expresión de condición con la misma acción.
|
||
|
|
||
|
```go
|
||
|
switch fruit := "lemon"; fruit {
|
||
|
case "banana", "lemon":
|
||
|
fmt.Printf("Yellow fruit.")
|
||
|
default:
|
||
|
fmt.Printf("This fruit is a color different than yellow.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Salida: `Yellow fruit.` .
|
||
|
|
||
|
### Sin expresión
|
||
|
|
||
|
Un interruptor sin expresión significa `switch true` . Esta es una versión alternativa a una cadena else-if.
|
||
|
|
||
|
```go
|
||
|
fruit := "banana"
|
||
|
switch {
|
||
|
case fruit == "banana":
|
||
|
fmt.Printf("Yellow and long.")
|
||
|
default:
|
||
|
fmt.Printf("This is not a banana.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Esto evalúa `true == (fruit == "banana")` , simpliado a `true == true` , que devuelve true.
|
||
|
|
||
|
### Descanso
|
||
|
|
||
|
Puede romper el código en una instrucción de cambio para omitir cualquier otro código.
|
||
|
|
||
|
```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.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Salida: ¡ `This apple is green!` .
|
||
|
|
||
|
### Caer a través
|
||
|
|
||
|
Pase al siguiente caso, si su condición se evalúa como verdadera.
|
||
|
|
||
|
```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.")
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Salida: `Yellow and long.` Y `Red and round.` .
|