UPD:事实证明,这是有关Go中错误处理的问题
我编写了一个简单的网络抓取工具,该工具在“主线程”上生成网页的地址,在一个go例程中获取实际的页面,然后通过传回内容chan,然后将其写入另一个文件中。常规。但是,在此过程进行了约300,000次迭代后,出现以下错误:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x38 pc=0x22e9]</pre>
错误“ stacktrace”很长,很遗憾,我现在没有它(我将在重复实验后稍后再发布)。
是否需要以某种方式管理内存,关闭通道或类似的东西?
以下是一些遗漏的代码。
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strconv"
)
func main() {
channel := make(chan []byte)
for i:=0; i < 20; i++ {
go fetcher(generateLink(), channel)
}
for a:=0; ; a++ {
go writeToFile(strconv.Itoa(a), <-channel)
go fetcher(generateLink(), channel)
fmt.Println(strconv.Itoa(a))
}
}
func fetcher(url string, channel chan []byte) {
resp, err := http.Get(url)
if err != nil {
channel <- []byte("")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
channel <- body
}
func writeToFile(filename string, bytes []byte) {
ioutil.WriteFile(filename+".html", bytes, 0644)
}
func generateLink() string {
...
}
郎朗坤
慕盖茨4494581
慕田峪4524236
相关分类