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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐