Olá, estava seguindo a aula e ao tentar executar o script em Go para monitorar os sites, eu me deparei com o seguinte problema:
Monitorando...
Testando site 0 : www.globo.com
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x629ef6]
goroutine 1 [running]:
main.testaSite({0xc00001a330, 0xd})
/home/brunoteixeira/go/src/hello/hello.go:122 +0x56
main.iniciarMonitoramento()
/home/brunoteixeira/go/src/hello/hello.go:99 +0x245
main.main()
/home/brunoteixeira/go/src/hello/hello.go:32 +0xe5
exit status 2
Seguindo o track do erro, o problema teria sido causado nesse pedaço do código:
func testaSite(site string) {
resp, err := http.Get(site)
fmt.Println(resp.StatusCode)
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 problema. Status Code:", resp.StatusCode)
}
}
Mas enviarei as outras partes do código envolvidas no processo.
func iniciarMonitoramento() {
fmt.Println("Monitorando...")
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 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
}
}
return sites
}