Golang中使用lua進行擴充套件

2021-09-16 12:04:59 字數 1555 閱讀 2992

最近在專案中需要使用lua進行擴充套件,發現github上有乙個用golang編寫的lua虛擬機器,名字叫做gopher-lua.使用後發現還不錯,藉此分享給大家.

lua中的資料型別與golang中的資料型別對應關係作者已經在文件中說明,值得注意的是型別是以l開頭的,型別的名稱是以lt開頭的.

golang中的資料轉換為lua中的資料就必須轉換為l開頭的型別:

str := "hello"

num := 10

l.lstring(str)

l.lnumber(float64(num))

lua中的資料轉換為golang中的資料,專案提供了toint,checkstring之類的函式來進行轉換,但是這都是必須提前知道型別的,如果不知道就必須進行型別判斷:

value := l.get(1)

switch value.type()

這裡還可以使用gopher-luar來方便的進行型別轉換.

golang中的函式必須轉換為func(l *lua.state) int這種形式才能注入lua中,返回引數的int代表了返回引數的個數.

func hello(l *lua.state) int 

//注入lua中

l.setglobal("hello", l.newfunction(hello))

在golang中呼叫lua函式,lua指令碼中需先定義這個函式,然後呼叫callbyparam進行呼叫:

//先獲取lua中定義的函式

fn := l.getglobal("hello")

if err := l.callbyparam(lua.p, lua.lnumber(10)); err != nil

//這裡獲取函式返回值

ret := l.get(-1)

type role struct 

type person struct

l := lua.newstate()

if err := l.dostring(`

person = ,

}}`); err != nil

var person person

panic(err)

}fmt.printf("%s %d", person.name, person.age)

專案中提供了lua基本模組,呼叫openlibs就可以載入這些模組,其中包括io,math,os,debug等.如果想自己載入可以使用skipopenlibs引數跳過.

如果想開發自己的庫,文件中也做出了說明:

func loader(l *lua.lstate) int 

var exports = map[string]lua.lgfunction

func myfunc(l *lua.lstate) int

//這裡就可以載入mymodule模組

l.preloadmodule("mymodule", mymodule.loader)

在 GoLang 中使用 jwt 進行認證

jwt 即 json web token,是用 json 形式安全傳輸資訊的方法。對 jwt 解碼,可以得到以下內容 jwt 可以設定過期時間,它的應用主要有 一般服務端生成 jwt 並返回給客戶端時,要放在 cookie裡,並且加上httponly的標記,意味著這個 cookie不能被 js獲取,...

Golang 在Golang中使用json

由於要開發乙個小型的web應用,而web應用大部分都會使用json作為資料傳輸的格式,所以有了這篇文章。包引用import 用於存放資料的結構體type mydata struct這裡需要注意的就是後面單引號中的內容。json item 這個的作用,就是name欄位在從結構體例項編碼到json資料格...

VSCode離線環境中使用csharp擴充套件

vscode c 官網外掛程式 installing c dependencies.platform win32,x86 64 downloading package omnisharp for windows net 4.6 x64 看到github issue中討論,需要手動編譯離線包,參考 我...