1
resposta

[Dúvida] os.Exit(-1)

default:
        fmt.Println("Comando inválido!")
        os.Exit(-1)
        

Fiz um teste no retorno do os.exit(-01) no nosso projeto e percei que se eu seleciono uma opção inválida com string, ele não retorna o status code. Só retorna se eu selecionar uma opção inválida com inteiro. Como eu poderia ajeitar isso, fazer com que retornasse o status code, mesmo se colocar uma string?

Olá  Cynthia
Este programa está na versão 1.1
Digite a opção desejada:
1 - Iniciar o monitoramento
2 - Exibir os logs
0 - Sair do programa
w
O comando escolhido foi  0
Saindo do programa!

Olá  Cynthia
Este programa está na versão 1.1
Digite a opção desejada:
1 - Iniciar o monitoramento
2 - Exibir os logs
0 - Sair do programa
8
O comando escolhido foi  8
Comando inválido!
exit status 255
1 resposta

Olá, Cynthia!

O problema aqui é que a função fmt.Scan(&comando) está esperando um número inteiro. Se você digitar uma string, essa função não será capaz de armazenar o valor em comando e, portanto, comando permanecerá com seu valor zero (que é 0 para números inteiros em Go). Isso explica por que o comando escolhido é impresso como 0 quando você digita uma string.

Para resolver isso, você pode mudar a variável comando para ser uma string. Isso permitirá que ela armazene tanto números quanto letras. Aqui está um exemplo de como você pode fazer isso:

package main

import (
    "fmt"
    "os"
)

func main() {
    exibeIntroducao()
    exibeMenu()

    comando := leComando()

    switch comando {
    case "1":
        fmt.Println("Monitorando...")
    case "2":
        fmt.Println("Exibindo Logs...")
    case "0":
        fmt.Println("Saindo do programa...")
        os.Exit(0)
    default:
        fmt.Println("Comando inválido!")
        os.Exit(-1)
    }
}

func exibeIntroducao() {
    nome := "Cynthia"
    versao := 1.1
    fmt.Println("Olá,", nome)
    fmt.Println("Este programa está na versão", versao)
}

func exibeMenu() {
    fmt.Println("Digite a opção desejada:")
    fmt.Println("1 - Iniciar o monitoramento")
    fmt.Println("2 - Exibir os logs")
    fmt.Println("0 - Sair do programa")
}

func leComando() string {
    var comandoLido string
    fmt.Scan(&comandoLido)
    fmt.Println("O comando escolhido foi", comandoLido)

    return comandoLido
}

Neste exemplo, a função leComando() agora retorna uma string e comando é uma string. No switch, agora estamos comparando comando com strings em vez de números.

Bons estudos!