Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Uso de letras no comando

O código apresentado até o final do curso não é capaz de reconhecer letras no comando , colocando assim o valor "0" ,então como faço para ele conhecer se tem uma letra no comando , aqui o meu código que segue mais ou menos a do professor:

package main

import (
    "bufio"
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "os"
    "strconv"
    "strings"
    "time"
)

const limete = 3
const delay = 5

func main() {
    exibeNome()
    for {
        exibeMenu()
        comando := leComando()
        fmt.Println("")
        switch comando {
        case 1:
            monitoraSites()
        case 2:
            exibeLog()
        case 0:
            os.Exit(0)
        default:
            fmt.Println("Não conheço esse comando.")
            os.Exit(-1)
        }
    }
}
func exibeNome() {
    nome := "Pedro"
    versao := 1.13
    fmt.Println("Olá sr:", nome, ".")
    fmt.Println("Essa é a versão ", versao, " do GO")
}
func exibeMenu() {
    fmt.Println("Qual comando você deseja fazer agora.")
    fmt.Println("1-Monitorar sites.")
    fmt.Println("2-Exibir Logs.")
    fmt.Println("0-Sair do programa.")
}
func leComando() int {
    var comando int
    fmt.Scan(&comando)
    return comando
}
func monitoraSites() {
    sites := leArquivoSites()
    for tentativas := 1; tentativas <= limete; tentativas++ {
        for i, site := range sites {
            fmt.Println("Monitorando o item", i, ", site", site)
            testaSites(site)
        }
        fmt.Println("")
        time.Sleep(delay * time.Minute)
    }

}

func testaSites(site string) {
    resp, err := http.Get(site)
    if resp.StatusCode == 200 {
        fmt.Println("foi carregado com sucesso;Status Code:", resp.StatusCode)
        registraLogs(site, true)
    } else {
        fmt.Println("teve problemas;Status Code:", resp.StatusCode)
        registraLogs(site, false)
    }
    if err != nil {
        fmt.Println("Ocorreu um erro:", err)
    }
}
func leArquivoSites() []string {
    var sites []string
    arquivo, err := os.Open("sites.txt")

    if err != nil {
        fmt.Println("Ocorreu um erro:", err)
    }
    leitor := bufio.NewReader(arquivo)

    for {
        linha, err := leitor.ReadString('\n')
        linha = strings.TrimSpace(linha)
        sites = append(sites, linha)
        if err == io.EOF {
            break
        }
    }
    arquivo.Close()
    return sites
}
func registraLogs(site string, Status bool) {
    arquivo, err := os.OpenFile("logs.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666)

    if err != nil {
        fmt.Println("Ocorreu um erro:", err)
    }
    arquivo.WriteString(time.Now().Format("2/1/2006 15:4:5  Monday") + "-" + site + "-ONLINE:" + strconv.FormatBool(Status) + "\n")
    arquivo.Close()
}
func exibeLog() {
    arquivo, err := ioutil.ReadFile("logs.txt")
    if err != nil {
        fmt.Println("Ocorreu um erro", err)
    }
    fmt.Println(string(arquivo))
}
1 resposta
solução!

Fala Pedro, tudo bem?

Para ler letras você teria que trocar o tipo da variável comando (que hoje aceita apenas números inteiros:

var comando string 

e também seu switch, que deve tratar strings:

switch comando {
        case "1":
            monitoraSites()
        case "dois":
            exibeLog()
        case "sair":
            os.Exit(0)
        default:
            fmt.Println("Não conheço esse comando.")
            os.Exit(-1)
        }

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software