避免与golang进行数据竞争

避免与golang进行数据竞争,go,data-race,Go,Data Race,我有一个jobWorker,它应该处理作业,在这个worker中有数据库读写、日志文件、接收api和一些数据计算 var mystruct strcut{} func worker(v) { Get data from database ... Update database status ... useByWorker() ... Do some computing ... Receive API ... Write log

我有一个jobWorker,它应该处理作业,在这个worker中有数据库读写、日志文件、接收api和一些数据计算

var mystruct strcut{}

func worker(v) {
   Get data from database
   ...
   Update database status
   ...
   useByWorker()
   ...
   Do some computing
   ...
   Receive API
   ...
   Write log file
}

func useByWorker() {
    mystruct = {1,2,3}
}
这是我运行go worker的主要功能

func main() {
    var wg sync.WaitGroup
    data := [][]string{}
    wg.Add(1)
    for k,v := range data {
        k := k
        v := v
        go func(k int, v []string) {
            fmt.Println(k,v)
            worker(v)
            wg.Done()
        }(k, v)
    }

    wg.Wait()
}

数据竞争问题让日志和我在worker中使用的数据混淆。任何方法都可以不加锁(Mutex.lock)简单地解决数据争用问题。我希望工作可以更快地由工人处理


任何建议或提示都会有所帮助。谢谢。

如果您想要对文件进行无阻塞写入访问,您可以使用一个goroutine写入文件,通过通道传递消息。可以通过使用
或者你可以使用。它可以与多个goroutine一起工作。

您在
main
中使用WaitGroup是可疑的-您只需调用
Add(1)
一次,然后在goroutine中调用
Done
多次(对于
数据中的每个元素)。“我希望工作人员可以更快地处理。”---你真的认为几纳秒会让你的代码变慢吗?等待API或DB响应的时间消耗。这个问题的主要问题是,我应该如何在没有数据竞争的情况下同时独立地完成这些工作。