5
respostas

Não estou conseguindo imprimir conforme orientação

Abaixo, segue meu código que segui conforme orientações em aula, porém ao executar no terminal, não está me retornando os sites, aqui está o código ainda com o pacote 'io/ioutil', apenas para demonstrar que segui o que estava sendo indicado em aula, porém fiz a alteração para os 'os' e segui com a mesma dificuldade, e mesmo revisando, procurando, até jogando no chatgpt da vida, não localizei o erro, e o que me foi indicado de sugestão era uma etapa posterior a vista em aula, mas antes de avançar, gostaria de resolver meu problema inicial.

package main

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

const monitoramentos = 3
const delay = 5

func main() {
    exibeIntroducao()
    leSitesDoArquivo()
    for {
        exibeMenu()

        comando := leComando()

        switch comando {
        case 1:
            iniciarMonitoramento()
        case 2:
            fmt.Println("Exibindo logs...")
        case 0:
            fmt.Println("Saindo do programa...")
            os.Exit(0)
        default:
            fmt.Println("Não conheço este comando")
            os.Exit(-1)
        }
    }

}

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

func exibeMenu() {
    fmt.Println("1- Iniciar monitoramento")
    fmt.Println("2- Exibir logs")
    fmt.Println("0- Sair do programa")
}

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

    return comandoLido
}

func iniciarMonitoramento() {
    fmt.Println("Monitorando...")

    // sites := []string{"https://httpbin.org/status/200", "https://www.alura.com.br", "https://www.caelum.com.br/"}

    sites := leSitesDoArquivo()

    for i := 0; i < monitoramentos; i++ {
        for i, site := range sites {
            fmt.Println("Testando site", i, ":", site)
            testaSite(site)
        }
        time.Sleep(delay * time.Second)
        fmt.Println("")
    }

    fmt.Println("")
}

func testaSite(site string) {
    resp, err := http.Get(site)

    if err != nil {
        fmt.Println("Ocorreu um erro:", err)

    }

    if resp.StatusCode == 200 {
        fmt.Println("Site", site, "foi carregado com sucesso")
    } else {
        fmt.Println("site", site, "está com problemas. Status code:", resp.StatusCode)
    }
}

func leSitesDoArquivo() []string {

    var sites []string

    // arquivo, err := os.Open("sites.txt")
    arquivo, err := ioutil.ReadFile("sites.txt")

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

    fmt.Println(string(arquivo))
    return sites

}
5 respostas

Olá, Weslei, bom dia.

Pode ignorar essa primeira mensagem, estarei enviando ela somente para que eu possa visualizar melhor e lhe ajudar na próxima. Você se confundiu levemente, usando 3 aspas, para colocar o código, mas são 3 crases, desse modo:

```golang fmt.Println("Vermelho") ```

Segue abaixo código formatado:

package main

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

const (
    monitoramentos = 3 
    delay = 5
)

func main() { 
    exibeIntroducao() 
    leSitesDoArquivo() 
    
    for { 
        exibeMenu()

        comando := leComando()

        switch comando {
            case 1:
                iniciarMonitoramento()
            case 2:
                fmt.Println("Exibindo logs...")
            case 0:
                fmt.Println("Saindo do programa...")
                os.Exit(0)
            default:
                fmt.Println("Não conheço este comando")
                os.Exit(-1)
        }
    }
}

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

func exibeMenu() { 
    fmt.Println("1- Iniciar monitoramento") 
    fmt.Println("2- Exibir logs") 
    fmt.Println("0- Sair do programa") 	
}

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

    return comandoLido
}

func iniciarMonitoramento() { 
    fmt.Println("Monitorando...")

    // sites := []string{"https://httpbin.org/status/200", "https://www.alura.com.br", "https://www.caelum.com.br/"}

    sites := leSitesDoArquivo()

    for i := 0; i < monitoramentos; i++ {
        for i, site := range sites {
            fmt.Println("Testando site", i, ":", site)
            testaSite(site)
        }

        time.Sleep(delay * time.Second)
        fmt.Println("")
    }

    fmt.Println("")
}

func testaSite(site string) { 
    resp, err := http.Get(site)

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

    if resp.StatusCode == 200 {
        fmt.Println("Site", site, "foi carregado com sucesso")
    } else {
        fmt.Println("site", site, "está com problemas. Status code:", resp.StatusCode)
    }
}

func leSitesDoArquivo() []string {

    var sites []string

    // arquivo, err := os.Open("sites.txt")
    arquivo, err := ioutil.ReadFile("sites.txt")

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

    fmt.Println(string(arquivo))
    return sites
}

Okay!

Wesley, primeira sugestão:

Troque as mensagens de erros:

        // fmt.Println("Ocorreu um erro:", err)
        fmt.Println("Ocorreu um erro na leitura de sites de arquivo:", err)  

Depois disso, nos envia o output que você tem ao rodar seu programa para podermos tentar descobrir o erro.

Obrigado pelo retorno.

a mensagem que saiu foi a:

'Olá, sr. Wesley Este programa está na versão 1.2 Ocorreu um erro na leitura de sites de arquivo: EOF

1- Iniciar monitoramento 2- Exibir logs 0- Sair do programa'

Consegui descobrir, por algum motivo o diretório "sites.txt" foi criado, no visual studio estava com os links, porém na pasta do computador estava vazia, passei os links para lá para testar, salvei e rodou. Aparentemente não foi falha no código, devo ter errado algo na criação do diretório.

Parabéns por ter encontrado o problema sozinho!