golang调用lua脚本

上篇文章已经讲过golua如何安装,本篇文章主要讲解golang如何利用golua调用lua脚本
1:import

import "github.com/aarzilli/golua/lua"

2:调用lua脚本的几个重要函数

L := lua.NewState()   //创建一个lua虚拟机
L.DoFile("./xxx")  //设置要调用的lua文件
L.GetField(lua.LUA_GLOBALSINDEX,"xxx") //获取lua脚本的符号
L.Call(arg1,arg2)  //调用函数 第一个参数标识参数的个数,第二个参数标识返回值的个数

3:栗子
3.1:test.lua

--0返回值0参数
function GetStr()
        print "world"
end

--多参数0返回值
function GetBigger(a,b)
    if a >= b then
        print (a)
    else
        print (b)
    end
end

--0参数1返回值
function GetResult()
    return "hello"
end

--多参数1返回值
function Compare(a,b)
    if a >= b then
        return a
    else
        return b
    end
end

--1参数多返回值
function MoreReturn(a)
    if (a == 10) then
        return "world","hello","golang"
    end
end

3.2:golang调用

func main() {
    L := lua.NewState()
    L.OpenLibs()
    defer L.Close()

    err := L.DoFile("./test.lua")
    if err != nil{
        fmt.Println("err",err.Error())
    }

    /*zero params zero results*/
    L.GetField(lua.LUA_GLOBALSINDEX,"GetStr")
    //L.PushInteger(1)
    L.Call(0,0)


    /*two params zero results*/
    L.GetField(lua.LUA_GLOBALSINDEX,"GetBigger")
    L.PushInteger(6)
    L.PushInteger(3)
    L.Call(2,0)

    /*zero params one result*/
    L.GetField(lua.LUA_GLOBALSINDEX,"GetResult")
    L.Call(0,1)
    ret1 := L.ToString(1)
    fmt.Println(ret1)
    L.Pop(1)    

    /*two params one result*/
    L.GetField(lua.LUA_GLOBALSINDEX,"Compare")
    L.PushInteger(7)
    L.PushInteger(9)
    L.Call(2,1)
    ret2 := L.ToInteger(1)
    fmt.Println(ret2)
    L.Pop(1)

    /*one params more results*/
    L.GetField(lua.LUA_GLOBALSINDEX,"MoreReturn")   
    L.PushInteger(10)
    L.Call(1,3)
    ret3 := L.ToString(1)
    ret4 := L.ToString(2)
    ret5 := L.ToString(3)
    fmt.Println(ret3,ret4,ret5)
}

github

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值