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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章