前言
在PHP的开发中,我们经常会在for循环中使用continue语法来实现判断逻辑后跳转到指定的位置,这种方法在业务中非常实用,那在 OpenResty 中,其实本身没有continue的语法,但可以使用
goto
语句来模拟,达到跳转到指定的标签位置的目的。
具体地,可以使用 ::label::
定义一个标签,然后使用 goto label
跳转到该标签位置。例如,以下代码演示了如何使用 goto
语句实现类似 continue
的逻辑:
for i = 1, 10 do
if i % 2 == 0 then
ngx.say("goto continue")
goto continue
end
ngx.say(i)
::continue::
end
以上代码输出结果:
1
goto continue
3
goto continue
5
goto continue
7
goto continue
9
goto continue
在上述代码中,如果 i
是偶数,则跳转到标签 continue
,否则输出 i
的值。标签 continue
的位置位于 ngx.say(i)
的后面,因此可以实现类似 continue
的效果。
需要注意的是,goto
语句可能会导致代码结构混乱,降低代码的可读性和可维护性。因此,应该尽量避免使用 goto
语句,尽量使用其他结构化的控制语句来实现相同的功能。