0

当我通过 build and run 命令在 LiteIDE 中运行此代码时,它可以工作。但是当我运行它时

go run scraper.go

或者

go build scraper.go
./scraper

它在 r.Body.Close() 行中失败并出现错误

panic: runtime error: invalid memory address or nil pointer dereference

这是有问题的代码:

r, err := http.Get(job.Url) 
defer r.Body.Close() //same error with or without defer

脚本在这里:https ://gist.github.com/meddulla/5934457但它基本上接受通过发布请求抓取的网址,例如

curl -X POST -d "[{\"url\": \"http://localhost:8888/IBTX/proj/dev/article.html\"}]" http://localhost:8080/jobs/add

而且我不明白为什么它会在 liteIde 中工作,但当我直接在终端中运行它时却不行(程序启动正常,所以它不是 GOPATH 设置或其他东西,它只会在响应发布请求时失败)

任何想法为什么?

4

1 回答 1

6

您首先需要检查 err 不是 nil 。

r, err := http.Get(job.Url) 
if err != nil {
  log.Fatal(err)
}
defer r.Body.Close() //same error with or without defer
于 2013-07-05T13:32:04.690 回答