Lua 調用 Go 語言:glua
一個go lua binding,為了使用方便,并沒有封裝很多lua api,只是是為了實現以下功能的簡單封裝:
- 可以將go函數注冊到lua中去,擴展lua的函數庫,參數自動轉換,支持不定參數
- 可以同時執行多個lua腳本
- 從go中嗲用lua中的函數
- 支持bool、int、float、string類型的相互轉換,其他類型可以傳遞到lua中,但是只能傳回go中使用 </ol>
這個binding很簡單,下面的例子已經把所有能調用的API都調用了一遍:)
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, // 不定參數函數 }, } if ok, err := L.Register(&tlib); !ok { fmt.Println(err.Error()) return } // 執行lua語句 L.Dostring(`gotest.PrintInt(gotest.NewInt(), "Int is")`) // 執行lua腳本 L.Dofile("test.lua") // 調用lua函數 L.Call("gotest.goprintln", "Call lua function.", 123456) }
lua腳本
--test.lua gotest.goprintln(true, 123, "lua", gotest.NewInt())
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!