gluaLua 調(diào)用 Go 語(yǔ)言
自己寫的一個(gè)go lua binding,為了使用方便,并沒(méi)有封裝很多l(xiāng)ua api,只是是為了實(shí)現(xiàn)以下功能的簡(jiǎn)單封裝:
- 可以將go函數(shù)注冊(cè)到lua中去,擴(kuò)展lua的函數(shù)庫(kù),參數(shù)自動(dòng)轉(zhuǎn)換,支持不定參數(shù)
- 可以同時(shí)執(zhí)行多個(gè)lua腳本
- 從go中嗲用lua中的函數(shù)
- 支持bool、int、float、string類型的相互轉(zhuǎn)換,其他類型可以傳遞到lua中,但是只能傳回go中使用
這個(gè)binding很簡(jiǎn)單,下面的例子已經(jīng)把所有能調(diào)用的API都調(diào)用了一遍:)
package main
import (
"fmt"
"glua"
)
type Int struct {
I int
}
func NewInt() *Int {
return &Int{10}
}
func (i Int) PrintInt(str string) {
fmt.Println(str, i.I)
}
func main() {
L := glua.NewState()
L.Openlibs()
var tlib = glua.Libfuncs{
"gotest", // lib name
map[string]interface{}{
"NewInt": NewInt, // lua function name, go function
"PrintInt": (*Int).PrintInt,
"goprintln": fmt.Println, // 不定參數(shù)函數(shù)
},
}
if ok, err := L.Register(&tlib); !ok {
fmt.Println(err.Error())
return
}
// 執(zhí)行l(wèi)ua語(yǔ)句
L.Dostring(`gotest.PrintInt(gotest.NewInt(), "Int is")`)
// 執(zhí)行l(wèi)ua腳本
L.Dofile("test.lua")
// 調(diào)用lua函數(shù)
L.Call("gotest.goprintln", "Call lua function.", 123456)
}
lua腳本
--test.lua gotest.goprintln(true, 123, "lua", gotest.NewInt())
如果使用上有什么問(wèn)題,請(qǐng)直接給我反饋,謝謝!
評(píng)論
圖片
表情
