使用goroutine和通道处理数千个数据的删除作业

问题描述

我通常使用Javascript编写程序,并且我总是使用async await来处理一些工作,无论如何从不使用javascript中的worker,现在我在Go项目中服务需要一些逻辑来删除Bucket中的数据,但在删除存储桶中的文件时有一些条件,也许在循环中,我应该做这样的工作:

for _,v := range documents {
   // query delete where `doc.id === v.id`
   
   // then 

   // logic to delete some files in the bucket
}

如果我不并发使用,它可能不如并发快,因此我尝试了以下方法

type ResultChannel struct {
  Link  string 
  Err   error 
  Msg   string
}

ch := make(chan ResultChannel)
for _,v := range documents {
  go func() {

     // query delete where `doc.id === v.id`
    if err != nil {
       ch<- ResultChannel{Link: v.Link,Err: err,Msg: err.Error()}
    }

    // logic to delete some files in the bucket
    if err != nil {
       ch<- ResultChannel{Link: v.Link,Msg: err.Error()}
    }
  }()
}

使用goroutine和channel的最佳实践是什么?还是有任何例子可以为它提供一些建议?我们可以只在这种情况下使用通道吗?而不使用sync.WaitGroup

我已经搜索并阅读了一些关于此的文章/问题,但是我仍然对此并不太了解,我现在想在此询问我的真实情况,如果这没有任何意义,请告诉我

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)