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.` . |