最近對go語言比較感興趣,想試用go來作點東西,go作主框架,動態加載一些程序來執行。因爲如今go語言不支持go模塊的動態連接,因此須要選用一個腳本語言來補充,找了一下,感受lua比較符合要求,虛擬機比較小,能夠同時開多個執行多個lua腳本。因而就找了一下go對lua的binding,找到golua,可是已經很久沒更新了,如今go1下編譯都通不過,修改了一下經過來,結果發現不能註冊go函數到lua中執行。。。框架
不得已,就想本身寫一個,但願他能知足一下要求:函數
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, // lua function name, go function "goprintln": fmt.Println, }, } if ok, err := L.Register(&tlib); !ok { fmt.Println(err.Error()) return } L.Dostring(`gotest.PrintInt(gotest.NewInt(), "Int is")`) L.Dofile("test.lua") L.Call("gotest.goprintln", "Call lua function.", 123456) }
--test.lua gotest.goprintln(true, 123, "lua", gotest.NewInt())