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)
}
相關推薦
golang呼叫lua指令碼
上篇文章已經講過golua如何安裝,本篇文章主要講解golang如何利用golua呼叫lua指令碼 1:import import "github.com/aarzilli/golua/lua"
使用redistemplate呼叫lua指令碼的簡單應用場景
最近學習了下lua,主要想在redis或者nginx做一些拓展,redis的資料型別很多,能幫助我們處理業務中的很多場景,從 Redis 2.6.0 版本開始,通過內建的 Lua 直譯器,可以使用 EVAL 命令對 Lua 指令碼進行求值。 redis對lua指令碼的呼叫是原子性的,所以一些
windows7環境中java呼叫lua指令碼函式
最近lua這種語言比較火!該語言的設計目的是其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。 我想說的是如何在Java下使用Lua以提高程式設計效率、增強你的程式可擴充套件性。 首先,要在Java上使用Lua指令碼,必須有關於Lua
redis呼叫lua指令碼
前言在redis中很多基本操作都是原子操作.但是缺少事務的概念,所幸的是redis支援lua指令碼,可以利用lua指令碼實現事務特性.程式碼 /** * 執行比 較對應key值大小,更新較大值 的l
快速入門Redis呼叫Lua指令碼及使用場景介紹
Redis 是一種非常流行的記憶體資料庫,常用於資料快取與高頻資料儲存。大多數開發人員可能聽說過redis可以執行 Lua 指令碼,但是可能不知道redis在什麼情況下需要使用到Lua指令碼。 ![](https://img2020.cnblogs.com/other/1815316/202102/18153
【學習筆記】【Cocos2d-x Lua指令碼開發】如何使用Lua指令碼呼叫自定義類
步驟:自定義類——>使用tolua++編譯到LuaCoco2d.cpp——>Lua指令碼呼叫 具體的操作步驟如下: 步驟一:自定義類 建立自定義類 //DeepSeaHero.h #include "cocos2d.h" using namespace
Lua指令碼層面呼叫外部DLL
任何語言都有辦法和lua互動,原因是它們都可以和C互動,而LUA是用C寫的,所以....。比如:java可以通過jni和C/C++互動,C#可以通過平臺呼叫和native互動。所以java和C#都可以和lua互動。首先可以把其他語言或C/C++的第三庫提供的介面,用LUA所
[Unity] .lua指令碼呼叫C#方法的一小點坑
試用ulua對專案進行重新組裝.有時候不可避免的需要呼叫C#寫好的工具類和方法.. 在.lua指令碼中需要呼叫c#的類方法的時候,首先,需要再WrapFile.cs 中新增: 並在選單中點選: 下面是.lua呼叫C#方法: 這裡有兩個需要注意的地方: 1.呼叫的
310day(splash lua指令碼,API呼叫)
《2018年8月8日》【連續310天】 標題:splash lua指令碼,API呼叫; 內容: 1.lua指令碼: function main(splash) return "hello world" end lua指令碼語言的基本語法: 2.API呼叫
Unity3D熱更新之LuaFramework篇[05]--Lua指令碼呼叫c#以及如何在Lua中使用Dotween
在上一篇文章 Unity3D熱更新之LuaFramework篇[04]--自定義UI監聽方法 中,我對LuaBehaviour指令碼進行了擴充套件,添加了兩個新的UI監聽方法,也提到最好能單寫一個指令碼處理此事。本篇文章就來繼續這個工作。 從Lua中呼
在redis中使用lua指令碼讓你的靈活性提高5個逼格
原文連結 在redis的官網上洋洋灑灑的大概提供了200多個命令,貌似看起來很多,但是這些都是別人預先給你定義好的,但你卻不能按照自己的意圖進行定製, 所以是不是感覺自己還是有一種被束縛的感覺,有這個感覺就對了。。。 一:Lua指令碼 說來也巧
java中呼叫本地指令碼
java中可以呼叫本地指令碼,也可以遠端呼叫shell指令碼,但是java呼叫遠端指令碼不安全,一般不這麼做,那該怎麼呼叫呢? 建議在本地寫個指令碼呼叫遠端指令碼,在java程式中呼叫本地指令碼,具體程式碼: private int execShell(String shellPa
QProcess呼叫bat指令碼 QString bat("F:\\mybat.bat"); QFile file1(bat); file1.open(QIODevice::Rea
在某些應用場景下可能需要呼叫批處理,在qt中可以輕鬆實現 #include "widget.h" #include <QApplication> #include <QProcess> #include <QDebug> #include <QTex
NC public private 端呼叫動作指令碼 推單報錯 空指標
業務場景:NC裡建立webservice 接收 第三方系統資料 將系統內的 自由態訂單 填充第三方資料後 呼叫動作指令碼推成 【稽核】態。 前期測試 在client增加測試按鈕 模擬推單 都沒有問題。模擬過程中碰見一個問題 推單不成功 原因:某欄位 沒有賦值導致 建議推單前 先從庫中
Swift 呼叫 Shell 指令碼
最近在進行一個工作專案,需要在swift中呼叫shell指令碼: Swift呼叫shell介面 1. GetQCRLog.swift // GetQCRLog // Created by Cyril on 7/19/18. // Copyright © 20
[SQL Server玩轉Python] 一.安裝環境及T-SQL呼叫python指令碼
在開發專案過程中,更多的是通過Python訪問SQL Server資料庫介面,進行資料探勘的操作;而SQL Server2016版本之後,嵌入了強大的R、Python、Machine Learning等功能,尤其是Python程式碼置於儲存過程中,可以實現一些便捷資料分析功能。 本系
Java呼叫JavaScript指令碼的例子
Java中提供了一個指令碼引擎管理器:ScriptEngineManager,它會在虛擬機器啟動時發現可用的指令碼引擎。 指令碼引擎管理器 構造一個 ScriptEngineManager,呼叫它的 getEngineFactories 方法,可用獲取到當前Java環境所有支援的引擎工廠,可
golang 呼叫cmd下程式隱藏黑視窗-方法1
通過go的標準庫exec呼叫cmd命令時會閃彈黑視窗,為解決此問題在windows下可以用win32 API 的 WinExec。 此問題主要出現在帶UI或無控制檯的程式呼叫cmd時。 編譯go時加入引數: go build -ldflags="-H wi
golang 呼叫win32 api 實現windows登出、重啟、關機
package main import ( "flag" "fmt" ) import ( . "github.com/CodyGuo/win" ) var ( arg string ) func init() { flag.StringVar(&arg, "uFlag
Redis呼叫lua生成驗證碼
場景: 通過微信公眾號拿驗證碼在APP上繫結,為了防止重複,嘗試使用reids-lua的方法實現此功能 以下是 php 呼叫 redis.eval 方法傳入的 lua 方法,當然這只是修改後的,保留了主要邏輯 local time = 1542363164 // unix時間戳 local code