golang调用lua脚本「建议收藏」

golang调用lua脚本「建议收藏」上篇文章已经讲过golua如何安装,本篇文章主要讲解golang如何利用golua调用lua脚本1:importimport”github.com/aarzilli/golua/lua”2:调用lua脚本的几个重要函数L:=lua.NewState()//创建一个lua虚拟机L.DoFile(“./xxx”)//设置要调用的lua文件L.GetField(lua.LUA_GL

大家好,欢迎来到IT知识分享网。

上篇文章已经讲过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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/24328.html

(0)
上一篇 2023-08-22 13:00
下一篇 2023-08-26 17:45

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信