为什么这个程序在liteIde中工作但是从终端运行时崩溃时指针引用无效?

Sof*_*fia 0 go

当我在LiteIDE中运行此代码时,通过构建和运行命令,它可以工作.但当我运行它时

go run scraper.go
Run Code Online (Sandbox Code Playgroud)

要么

go build scraper.go
./scraper
Run Code Online (Sandbox Code Playgroud)

它在带有错误的r.Body.Close()行中失败

panic: runtime error: invalid memory address or nil pointer dereference
Run Code Online (Sandbox Code Playgroud)

这是有问题的代码:

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

脚本在这里:https://gist.github.com/meddulla/5934457但它基本上接受网址通过帖子请求刮,例如

curl -X POST -d "[{\"url\": \"http://localhost:8888/IBTX/proj/dev/article.html\"}]" http://localhost:8080/jobs/add
Run Code Online (Sandbox Code Playgroud)

我无法理解为什么它会在liteIde中工作,但是当我直接在终端中运行时(程序启动正常,因此它不是GOPATH设置或其他东西,它只在响应发布请求时失败)

任何想法为什么?

mat*_*ttn 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
Run Code Online (Sandbox Code Playgroud)