Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

panic: runtime error

Saída do Código.

Este programa está na versão --> 1.1
1 - Iniciar motinoramento
2 - Exibir Logs
0 - Sair do Programa

1
Monitorando...
Teste nº--> 0 Site:  https://www.alura.com.br/
Status: --> Site no AR! https://www.alura.com.br/
Teste nº--> 1 Site:  https://wwww.random-status-code.herokuapp.com
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x1248fee]

goroutine 1 [running]:
main.testaSite(0x12d9f29, 0x2d)
        /Users/gabrielgardani/go/src/hello/hello.go:88 +0x5e
main.monitorarSite()
        /Users/gabrielgardani/go/src/hello/hello.go:79 +0x1c6
main.main()
        /Users/gabrielgardani/go/src/hello/hello.go:32 +0x17f
exit status 2

Meu Código:

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    boasVindas()

    for {
        exibeMenu()

        comando := lerComando()

        switch comando {
        case 1:
            fmt.Println("Monitorando...")
            monitorarSite()
        case 2:
            fmt.Println("Exibindo logs...")
        case 0:
            fmt.Println("saindo do programa")
            os.Exit(0) // encerra o programa
        default:
            fmt.Println("Comando desconhecido")
            os.Exit(-1) // informa um erro no sistema
        }

    }

}

func boasVindas() {

    nome := "Gabriel"
    versao := 1.1

    fmt.Println("Bem vindo ", nome)
    fmt.Println("Este programa está na versão -->", versao)

}

func exibeMenu() {

    fmt.Println("1 - Iniciar motinoramento")
    fmt.Println("2 - Exibir Logs")
    fmt.Println("0 - Sair do Programa")

}

func lerComando() int {
    var comandoLido int
    fmt.Scan(&comandoLido)

    return comandoLido
}

func monitorarSite() {
    sites := []string{"https://www.alura.com.br/", "https://wwww.random-status-code.herokuapp.com",
        "https://wwww.alura.com.br"}

    for i, site := range sites {

        fmt.Println("Teste nº-->", i, "Site: ", site)
        testaSite(site)

    }

}

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

    if resp.StatusCode == 200 {
        fmt.Println("Status: --> Site no AR!")
    } else {
        fmt.Println("Status: fora do ar, código de erro -->", resp.StatusCode)
    }

}
1 resposta
solução

Opa, vou referenciar o tópico original para não ficar duplicado: https://cursos.alura.com.br/forum/topico-panic-runtime-error-110090