Tip #31 使用跳转标签让break和continue语句更简洁

原始链接:Golang Tip #31: Loop labels for cleaner breaks and continues

通常避免使用标签和goto 语句,因为会降低代码可读性,使其难以理解。

上面简短的示例看起来很清晰易懂。但是随着代码复杂度的增加,可读性会大大降低:

  • 你可能要在距离goto 语句“数百英里”之外才能找到目的标签。

  • 你需要在代码上下文中去寻找goto语句跳转的目的标签在哪里。

跳转标签

例如,在处理嵌套循环时,某些情况下使用跳转标签是很不错的实践。

想象一下,我们在二维数组中搜索一个数字:

此时,你有一个更优雅的解决方案:在循环语句处声明跳转标签。

一旦声明了标签以后,你就可以使用breakcontinue 后跟一个标签实现不仅本层循环的跳转,任何外层循环的跳转都可以。

这样做的结果是?

代码不仅简短,而且更加清晰、明了。

我们可以在breakcontinue 语句中都使用标签。

另外一个有用的实例是当循环代码块中包含select{}

如果你在select 代码块中使用了不带标签的break,只会跳出select代码块,而不会跳出包含它的外层循环。

本节的技巧主要针对循环,但也可以使用在其他地方,比如switch实例: