Http 第一次循环迭代后内存地址无效或零指针解引用
当我从GetCompanyFileGlistres返回一个映射片并打印输出时,我的代码在一次迭代中运行良好。但是在第二次迭代中,我得到了一个恐慌:运行时错误:无效内存地址或零指针解引用 我确信这是我遗漏的非常简单的东西,但我不知道为什么在第一次迭代之后res似乎不可访问。GC正在从内存中删除它吗?我该如何阻止这种情况发生?谢谢 编辑: 我认为我在这个问题上的错误不包括GetCompanyFileGlistres消耗res.Body这一事实。因为它只能被消费一次Http 第一次循环迭代后内存地址无效或零指针解引用,http,pointers,go,scope,Http,Pointers,Go,Scope,当我从GetCompanyFileGlistres返回一个映射片并打印输出时,我的代码在一次迭代中运行良好。但是在第二次迭代中,我得到了一个恐慌:运行时错误:无效内存地址或零指针解引用 我确信这是我遗漏的非常简单的东西,但我不知道为什么在第一次迭代之后res似乎不可访问。GC正在从内存中删除它吗?我该如何阻止这种情况发生?谢谢 编辑: 我认为我在这个问题上的错误不包括GetCompanyFileGlistres消耗res.Body这一事实。因为它只能被消费一次 我发现了一个相关的答案。这似乎很可
我发现了一个相关的答案。这似乎很可能是因为res是一个响应和响应。Body是一个ReadCloser,只能消费一次 如果要重复使用正文,请使用ioutil.ReadAll将其读入类似[]字节的缓冲区或字符串。如果您想从res获得额外的数据,请使用struct将其包装起来
如果您的用例实际使用了对我更有意义的不同响应,请将http.Get移动到循环中。警告:获取url 1e5次可能会导致问题。edgar.getcompanyfillinstres做什么?很可能,问题就在那里。请发一封邮件,你要检查错误。res,err:=http.Geturl如果出错!=nil{log.Fatalerr}@phihag它刮取一个网页,正如我提到的,它返回一个地图片段。
package main
import (
"data/edgar"
"fmt"
"net/http"
)
func main() {
url := "calltomylocalserver.com/page.html"
res, _ := http.Get(url)
for i := 0; i < 100000; i++ {
// GetCompanyFilingListRes comsumes res.Body
// before returning a slice of maps
m := edgar.GetCompanyFilingListRes(res)
fmt.Println(m)
}
}