Http 第一次循环迭代后内存地址无效或零指针解引用

Http 第一次循环迭代后内存地址无效或零指针解引用,http,pointers,go,scope,Http,Pointers,Go,Scope,当我从GetCompanyFileGlistres返回一个映射片并打印输出时,我的代码在一次迭代中运行良好。但是在第二次迭代中,我得到了一个恐慌:运行时错误:无效内存地址或零指针解引用 我确信这是我遗漏的非常简单的东西,但我不知道为什么在第一次迭代之后res似乎不可访问。GC正在从内存中删除它吗?我该如何阻止这种情况发生?谢谢 编辑: 我认为我在这个问题上的错误不包括GetCompanyFileGlistres消耗res.Body这一事实。因为它只能被消费一次 我发现了一个相关的答案。这似乎很可

当我从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)
    }
}