1. 程式人生 > >golang呼叫lua指令碼

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