Lua 調用 Go 語言:glua

jopen 12年前發布 | 82K 次閱讀 Lua Go語言 Lua開發

一個go lua binding,為了使用方便,并沒有封裝很多lua api,只是是為了實現以下功能的簡單封裝:

  1. 可以將go函數注冊到lua中去,擴展lua的函數庫,參數自動轉換,支持不定參數
  2. 可以同時執行多個lua腳本
  3. 從go中嗲用lua中的函數
  4. 支持bool、int、float、string類型的相互轉換,其他類型可以傳遞到lua中,但是只能傳回go中使用
  5. </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())

    項目主頁:http://www.baiduhome.net/lib/view/home/1341242889090

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!