golang调用lua脚本

来源:互联网 发布:程序员的技术栈 编辑:程序博客网 时间:2024/06/15 20:29

上篇文章已经讲过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)    endend--0参数1返回值function GetResult()    return "hello"end--多参数1返回值function Compare(a,b)    if a >= b then        return a    else        return b    endend--1参数多返回值function MoreReturn(a)    if (a == 10) then        return "world","hello","golang"    endend

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

原创粉丝点击