如何在for循环中的GoRoutine中'break'或'continue'?

How to 'break' or 'continue' in GoRoutine in for loop?

我是 golang 菜鸟。 我想在包含在 for 循环中的 GoRoutine 中中断或继续。

下面是我的代码

for i, m := range something {
  go func(i int, m someModel){
    if m.Name == "AAA" {
      continue;   // Here occurs error
    }

    // Do something
    // which is very long....
  }
}

在 vsCode 中,错误提示 “continue not in for statement”。

我知道可以通过(if ~ else)语句轻松解决, 但是我代码中的 'else' 部分太长了,这让代码看起来很脏。
我只是想知道是否有其他方法可以解决这个问题。

谢谢。

我自己解决了...

'return' 确实适用于这种情况。
但是WaitGroup.Done()之前必须进行。

修改后的代码如下

var wg sync.WaitGroup
wg.Add(mySize)

for i, m := range something {
  go func(i int, m someModel){
    defer wg.Done() // must be before return
    if m.Name == "AAA" {
      return
    }

    // Do something
    // which is very long....
  }
}

希望有人能得到帮助。

函数运行 go语句会脱离主线程上下文,所以这里不能使用continue语句。有两种方法可以实现您的目标

第一种方式是通过go语句启动函数,函数里面判断是否满足继续执行的条件,return语句结束Routine

for i, m := range something {
  go func(i int, m someModel){
    if m.Name == "AAA" {
      return // use return
    }

    // Do something
    // which is very long....
  }
}

第二种方式是通过go语句在函数启动前查看数据。如果不满足启动要求,可以通过continue语句跳过。

for i, m := range something {
  if m.Name == "AAA" {
    continue   // Check before start
  }

  go func(i int, m someModel){
    // Do something
    // which is very long....
  }
}

从你的代码上下文推断,我推荐你第二种