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