上篇文章已經講過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)
}