利用continue label简化逻辑

2024-07-04 16:00:20 浏览数 (2)

前言

在Go语言中,continue语句可以标签一起使用,continue label在处理复杂的嵌套循环时非常有用,可以让代码变得更简洁。

示例

下面的代码来自Continue statements with Labels in Go

在list.Items中查找与目标 reserved.Items 匹配的item,如果找到了,直接break并继续外层循环,如果没有找到做些处理。可以看到,代码中引入一个bool类型变量found,用于表示是否找到。在内层的循环中如果有匹配的item,设置found为true,在外层的循环中根据found是否为true做不同的处理。

代码语言:javascript复制
for _, item := range list.Items {
 found := false

 for _, reserved := range reserved.Items {
  if reserved.ID == item.ID {
   found = true
   break
  }
  ... do some other work ...
 }

 if found {
  continue
 }

 ... do some other work ...
}
使用continue label

使用continue label,不再用标记位found做很多判断处理,直接continue OUTER简单明了,如果有匹配的item,直接执行外层剩余的循环。

代码语言:javascript复制
OUTER:
for _, item := range list.Items {
 for _, reserved := range reserved.Items {
  if reserved.ID == item.ID {
   continue OUTER
  }
  ... do some other work ...
 }
 ... do some other work ...
}

0 人点赞