最近在專案中需要使用lua進行擴充套件,發現github上有乙個用golang編寫的lua虛擬機器,名字叫做gopher-lua.使用後發現還不錯,藉此分享給大家.
lua中的資料型別與golang中的資料型別對應關係作者已經在文件中說明,值得注意的是型別是以l開頭的,型別的名稱是以lt開頭的.
golang中的資料轉換為lua中的資料就必須轉換為l開頭的型別:
lua中的資料轉換為golang中的資料,專案提供了toint,checkstring之類的函式來進行轉換,但是這都是必須提前知道型別的,如果不知道就必須進行型別判斷:str := "hello"
num := 10
l.lstring(str)
l.lnumber(float64(num))
這裡還可以使用gopher-luar來方便的進行型別轉換.value := l.get(1)
switch value.type()
golang中的函式必須轉換為func(l *lua.state) int這種形式才能注入lua中,返回引數的int代表了返回引數的個數.
在golang中呼叫lua函式,lua指令碼中需先定義這個函式,然後呼叫callbyparam進行呼叫:func hello(l *lua.state) int
//注入lua中
l.setglobal("hello", l.newfunction(hello))
//先獲取lua中定義的函式
fn := l.getglobal("hello")
if err := l.callbyparam(lua.p, lua.lnumber(10)); err != nil
//這裡獲取函式返回值
ret := l.get(-1)
專案中提供了lua基本模組,呼叫openlibs就可以載入這些模組,其中包括io,math,os,debug等.如果想自己載入可以使用skipopenlibs引數跳過.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)
如果想開發自己的庫,文件中也做出了說明:
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中討論,需要手動編譯離線包,參考 我...