Para fazermos escolhas da linguagem de programação Go, utilizamos o comando
switch que possui sua sintaxe apresentada abaixo.
Fig. 1: Fluxograma Comando switch
 |
Sintaxe
switch valor ou expressao {
case caso1:
//código
//break opcional
case caso2:
//código
//break opcional
case casoN:
default: //opcional
}
Onde
valor: argumento que desejamos verificar se existe algum caso associado.
Podem conter valores numérico, texto.
caso1..casoN: casos comparados com valor. Se o resultado for verdadeiro, o trecho de código
dentro do caso é executado.
Diferente de outras linguagens como C/C++, Java e C# e outros,
em Go o comando break é opcional para interromper a execução de um case.
Para ver como funciona o comando break visite
Comando Break.
O caso default é opcional. Com esse caso, podemos executar algum trecho
de código caso o valor não seja igual a algum dos valores da cláusula case.
Exemplo 1: valor inteiro
package main
import "fmt"
func main() {
valor := 3
switch valor {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3:
fmt.Println("3")
default:
fmt.Println("não encontrado")
}
}
Saída
3
switch com string
Como mencionado na sintaxe acima, a linguagem Go, permite o uso do comando
switch com strings:
Exemplo 2
package main
import "fmt"
func main() {
valor := "tres"
switch valor {
case "um":
fmt.Println("1")
case "dois":
fmt.Println("2")
case "tres":
fmt.Println("3")
default:
fmt.Println("não encontrado")
}
}
Saída
3
switch com múltiplos cases
Para a execução de um mesmo trecho de código para mais de uma case, basta
adicionar as cláusulas case em sequência ou um abaixo do outro separados por (:).
Exemplo 3
package main
import "fmt"
func main() {
valor := "tres"
switch valor {
case "um":
case "dois":
fmt.Println("2")
case "tres":
fmt.Println("3")
default:
fmt.Println("não encontrado")
}
}
Saída
2
switch com constantes
Podemos utilizar a declaração a declaração de constantes em bloco com o bloco var
como valores para comparação nos cases do comando switch.
Exemplo 4
package main
import "fmt"
type Status int
const (
Opcao0 = iota //0
Opcao1 //1
Opcao2 //2
)
func main() {
valor := Opcao2
switch valor {
case Opcao1:
fmt.Println(valor)
case Opcao2:
fmt.Println(valor)
case Opcao3:
fmt.Println(valor)
default:
fmt.Println("inválido")
}
}
Saída
2
switch com função como argumento
Assim como no comando if, uma função pode ser utilizada como argumento de comparação do comando
de escolha switch. Isso pode ser visto no exemplo a seguir:
Exemplo 5
package main
import "fmt"
func funcao(val int) int {
if val == 0 {
return 0
}
if val == 1 {
return 1
}
return -1
}
func main(){
switch funcao(1) {
case 0 : fmt.Println(0)
case 1 : fmt.Println(0)
default: fmt.Println(-1)
}
}
Saída
1
switch com expressão como argumento
Expressões mais complexas podem ser usadas como argumento para o comando switch. Essas
expressões devem retornar um valor suportado pelo comando.
Exemplo 6
package main
import "fmt"
func main(){
valor := 0xff
switch ((valor>>4)&2) {
case 0 : fmt.Println(0)
case 1 : fmt.Println(1)
default: fmt.Println(-1)
}
}
Saída
-1
switch com intervalo de dados
O switch nos permite utilizar expressões mais complexas em seus cases. Assim, por exemplo,
podemos verificar se um valor está contido em um intervalo de valor fazendo uso dos operadores
relacionais (<), (>), (<=) e (>=):
Exemplo 6
package main
import "fmt"
func main(){
val := 5
switch {
case val > 0 && val < 5: fmt.Println(val*2);
case val == 5 : fmt.Println(val*3);
default: fmt.Println(val*3);
}
}
Saída
15