golang呼叫lua指令碼

2021-08-13 22:58:59 字數 1907 閱讀 6921

import

"github.com/aarzilli/golua/lua"

2:呼叫lua指令碼的幾個重要函式

l := lua.newstate()   //建立乙個lua虛擬機器

l.dofile("./***") //設定要呼叫的lua檔案

l.getfield(lua.lua_globalsindex,"***") //獲取lua指令碼的符號

l.call(arg1,arg2) //呼叫函式 第乙個引數標識引數的個數,第二個引數標識返回值的個數

3:栗子

3.1:test.lua

--0返回值0引數

function

getstr()

print "world"

end--多引數0返回值

function

getbigger(a,b)

ifa >= b then

print (a)

else

print (b)

endend--0引數1返回值

function

getresult()

return

"hello"

end--多引數1返回值

function

compare(a,b)

ifa >= b then

return

aelse

return b

endend--1引數多返回值

function

morereturn(a)

if (a == 10) then

return

"world","hello","golang"

endend

3.2:golang呼叫

func main() 

/*zero params zero results*/

l.getfield(lua.lua_globalsindex,"getstr")

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

golang呼叫lua指令碼之安裝golua

tar xzvf ncurses 5.9 tar gztar xzvf readline 6.2 tar gz2.2 進入解壓好的目錄,執行 configure make install安裝完成 3 安裝lua 5.1.4.tar.gz 3.1 解壓 tar xzvf lua 5.1 4.tar g...

redis呼叫lua指令碼

在redis中很多基本操作都是原子操作 但是缺少事務的概念,所幸的是redis支援lua指令碼,可以利用lua指令碼實現事務特性 執行比 較對應key值大小,更新較大值 的lua指令碼 param key param time return public object updatehigherint...

Lua 指令碼呼叫 C 函式

上篇說到 c 程式裡呼叫lua 函式,此篇講lua 指令碼裡呼叫c 函式。lua要呼叫c 程式裡的函式,這些函式必須有同樣的原型 typedef int luafunc lua state l 結合工作上的業務來實現乙個簡單的lua 呼叫 c 函式的例子,業務是上這樣的,有一可攜式裝置向我們的裝置傳...