golang多线程分块下载器

在使用golang写一个多线程下载器的过程中,发现下载的结果是相同的,首先排除引用传递,确定是值传递,逐步排查,最后确定是http.Request的Header对象是相同的。也就是说,在对象拷贝过程中,对象的部分子元素是共享的。最后写了一个深度拷贝解决这个问题,深度拷贝一般思路是序列号和反序列化,所以gob json等都可以的。

func DeepCopy(dst, src interface{}) error {
	var buf bytes.Buffer
	if err := gob.NewEncoder(&buf).Encode(src); err != nil {
		return err
	}
	return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
}

下载器源码和文档 github

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据