Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Bug] Erro na função da Aula 6

Estou encontrando o seguinte problema, tanto com o código final do projeto criado e disponibilizado por vocês quanto o meu código...

Me parece que na função abaixo, o 'if' criado para informar que chegou no final do arquivo, não está funcionando como deveria ...

func leSitesDoArquivo() []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
}

Segue abaixo a execução do código onde é possível perceber que o arquivo 'lista.txt' foi lido porém ele continua tentando ler mesmo chegando ao final do arquivo... Ele procurar por mais uma linha ...

1 - Iniciar Monitoramento
2 - Exibir Logs
1
O comando escolhido foi 1

Monitorando...
Testando site 0 : https://www.alura.com.br
Site: https://www.alura.com.br foi acessado com sucesso
Testando site 1 : https://random-status-code.herokuapp.com
Site: https://random-status-code.herokuapp.com retornou erro! Status code: 404
Testando site 2 : https://www.caelum.com.br
Site: https://www.caelum.com.br foi acessado com sucesso
Testando site 3 : https://www.casadocodigo.com.br
Site: https://www.casadocodigo.com.br foi acessado com sucesso
Testando site 4 : 
Ocorreu um erro: Get "": unsupported protocol scheme ""
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x629b0e]

goroutine 1 [running]:
main.testaSite({0x0, 0x0})
    /home/faioli/go/src/monit/monitora-v1.4.go:87 +0xae
main.iniciaMonitor()
    /home/faioli/go/src/monit/monitora-v1.4.go:72 +0x245
main.main()
    /home/faioli/go/src/monit/monitora-v1.4.go:29 +0x152
exit status 2
3 respostas

hahah procurando no forum vi que em Julho/22 um aluno reclamou do mesmo problema! Vendo os arquivos que fiz download da plataforma: todos estão datados de 2017!!!!

O curso está largado pela Alura... uma pena

Fala, Thiago, Beleza?

O problema pode ser causado porque a variável err não está sendo inicializada corretamente. Quando o método ReadString() do objeto leitor chega ao final do arquivo, ele deve retornar o valor io.EOF na variável err, indicando que o final do arquivo foi alcançado. No entanto, se a variável err não estiver sendo inicializada corretamente, ela pode estar recebendo um valor diferente de io.EOF, o que faz com que o loop continue executando.

Para corrigir esse problema, você pode inicializar a variável err como nil antes de entrar no loop. Isso garantirá que a variável err tenha o valor correto quando o método ReadString() for chamado pela primeira vez. O código ficaria assim:

func leSitesDoArquivo() []string {
    var sites []string
    arquivo, err := os.Open("sites.txt")

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

    leitor := bufio.NewReader(arquivo)
    err = nil // inicializa a variável err como nil
    for {
        linha, err := leitor.ReadString('\n')
        linha = strings.TrimSpace(linha)

        sites = append(sites, linha)

        if err == io.EOF {
            break
        }

    }

    arquivo.Close()
    return sites
}

Sobre o seu comentário, não acredito que o curso esteja "largado", a Alura sempre busca revisar os cursos antigos e atualizar, as vezes gerando um curso totalmente novo e atualizado.

Espero que isso ajude, bons estudos.

solução!

Obrigado Anderson, segui a sua sugestão e adicionei no código final fornecido pelo curso ... o erro é o mesmo.