В настоящее время я изучаю Голанг (и пока мне это нравится).Но, к сожалению, я застрял на пару часов и, похоже, я не нашел решения своей проблемы в Google.
Так вот моя проблема.У меня есть этот фрагмент кода (из учебника):
func main() {
var s SitemapIndex
resp, _ := http.Get("https://www.washingtonpost.com/news-sitemaps/index.xml")
bytes, _ := ioutil.ReadAll(resp.Body)
resp.Body.Close()
xml.Unmarshal(bytes, &s)
for _, Location := range s.Locations {
resp, _ := http.Get(Location)
ioutil.ReadAll(resp.Body)
}
}
Я знаю, что мой код неполон, но это потому, что я удалил части, которые не вызывали проблему, чтобы сделать его более читабельным в Stackoverflow.
Поэтому, когда я получаю содержимое Location
и пытаюсь обработать данные с помощью ioutil.ReadAll()
, я получаю эту ошибку с указанием указателя:
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0x1210a69]
goroutine 1 [running]:
main.main()
/Users/tom/Developer/Go/src/news/index.go:23 +0x159
exit status 2
Я действительно не понимаю эту ошибкунезависимо от того, сколько я смотрю на это.Я пытался извлечь ошибку из ioutil.ReadAll(resp.Body)
, выполнив _, e := ioutil.ReadAll(resp.Body)
, а затем напечатав e
, но при этом выдает еще одну ошибку ...
Я где-то читал, что это может бытьпотому что тело, возвращенное мне, содержит ошибки, но в учебнике оно работает нормально.
Надеюсь, у вас, ребята, будет решение для меня.Спасибо.
РЕДАКТИРОВАТЬ: Вот структуры, которые я определил:
type SitemapIndex struct {
Locations []string `xml:"sitemap>loc"`
}
type News struct {
Titles []string `xml:"url>news>title"`
Keywords []string `xml:"url>news>keywords"`
Locations []string `xml:"url>loc"`
}
type NewsMap struct {
Keyword string
Location string
}