You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

gopher-lua v1.1.0中goto语句的正确使用方法咨询

gopher-lua v1.1.0中goto语句的正确使用方法咨询

嗨,我来帮你排查下这个问题~

你遇到的syntax error near '::'报错,大概率是两个核心原因导致的,咱们一步步来解决:

1. 先确认是否启用了Lua 5.2+模式

goto是Lua 5.2版本才引入的特性,而gopher-lua默认是兼容Lua 5.1的——哪怕你升级到了v1.1.0,如果没显式启用5.2+模式,解析器还是不会识别::标签语法,自然会报语法错误。

解决方法很简单,创建LuaState的时候加上版本配置即可:

L := lua.NewState(lua.Options{
    LuaVersion: lua.Lua52,
})
defer L.Close()

2. 检查goto和标签的使用规则

即使启用了5.2模式,gopher-lua的goto也要遵循Lua的核心规则,避免踩坑:

  • 同一个函数里不能重复定义相同名称的标签
  • 不能从外部代码块跳转到循环、if等结构内部的标签
  • 可以从结构内部跳转到外部的标签,或者同一结构内的标签(只要不违反作用域)

你原来的代码,在启用5.2模式后应该是可以正常运行的,它的逻辑是当i==2时跳过当前迭代的剩余代码,继续下一次循环。如果还是有问题,可以调整标签的位置,确保逻辑符合预期:

for i = 1, #backupSource do
    if i == 2 then
        goto continue
    end
    -- 这里写你需要执行的业务逻辑,i=2时会跳过这部分
    ::continue:: -- 标签放在循环块内,每次迭代的末尾
end

最后再确认版本

别忘了检查你的go.mod文件,确保gopher-lua的版本确实是v1.1.0,避免因为依赖缓存或者版本指定错误导致的问题。

备注:内容来源于stack exchange,提问作者Archer Sean

火山引擎 最新活动