Algumas semanas atrás, enquanto eu estava desenvolvendo um web crawler junto com um dos alunos de mentoria aqui do Aprenda Golang, nos deparamos com um problema onde precisávamos fazer o parse do resp.Body duas vezes, sendo a primeira para salvar o body no banco de dados e a segunda para extrair os links do página.
Para ficar mais claro, vamos ver o código abaixo.
// Executa a request
resp, err := http.Get(website)
if err != nil {
log.Println("ERROR:", err)
return
}
defer resp.Body.Close()
// Extrai conteúdo para salvar no banco de dados
content, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
// Retorna uma struct para extrair os links sem regex
body, err := html.Parse(resp.Body)
if err != nil {
panic(err)
}
Leia mais » 