为了账号安全,请及时绑定邮箱和手机立即绑定

使用 goroutines panic 构建 Zip,切片边界超出容量 4096

使用 goroutines panic 构建 Zip,切片边界超出容量 4096

Go
catspeake 2023-03-21 10:40:11
我正在尝试通过添加 goroutines 来处理每个必须存档的文件来改进构建 Zip 的功能。但它以恐慌告终 panic: runtime error: slice bounds out of range [4126:4096]目标目录包含 190 个文件(500 Mo)。我真的不明白出了什么问题,提前感谢您的帮助功能 :func BuildArchive() error {                                                                                                                                               var files []string                                                                 err := filepath.Walk("/tmp/dir-to-zip", func(filePath string, info os.FileInfo, err error) error {        if info.IsDir() {                                                                      return nil                                                                     }                                                                                  if err != nil {                                                                        fmt.Println(err)                                                                   return err                                                                     }                                                                                  files = append(files, filePath)                                                                                                                                       return nil                                                                     })                                                                                 if err != nil {                                                                        return err                                                                     }                                                                                                                                                                 
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

zip.Writer同时使用不安全。您启动多个 goroutines,每个 goroutines 创建和写入 zip 条目(文件)。

Writer.Create()记录:

创建使用提供的名称将文件添加到 zip 文件。它返回应写入文件内容的 Writer。

[...]在下一次调用 Create、CreateHeader 或 Close 之前,必须将文件的内容写入 io.Writer。

您不能同时创建一个 zip。io.Writer每个 zip 条目的 s 写入相同的底层文件(或通常相同的文件io.Writer),即使您的应用程序没有崩溃或崩溃,生成的 zip 存档也可能无效。


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信