golang调用lua脚本
本篇文章主要讲解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) }