modulepackage
0.0.0-20241126141032-d3599f223352
Repository: https://github.com/balrogsxt/lua-injection.git
Documentation: pkg.go.dev
# README
Lua-Injection
本项目是将github.com/yuin/gopher-lua
库作为lua虚拟机,通过反射的方式将自己编写的结构体方法转换成对应的LuaTable函数进行快速调用
调用方法
import (
"fmt"
lua "github.com/yuin/gopher-lua"
"testing"
"time"
)
// helper service
type HelperModule struct {
}
func (HelperModule) Name() string {
return "helper"
}
func (HelperModule) GetA() *A {
fmt.Println("call GetA()")
return &A{}
}
// a service
type A struct {
}
func (A) Name() string {
return "a"
}
func (A) GetB() *B {
fmt.Println("call GetB()")
return &B{}
}
// b service
type B struct {
cb func(string)
}
func (b *B) Name() string {
return "b"
}
func (b *B) Text() string {
fmt.Println("call B Text")
return time.Now().Format("2006-01-02 15:04:05")
}
func (b *B) Reg(cb func(string)) {
b.cb = cb
}
func (b *B) Emit(v string) {
if b.cb != nil {
b.cb(v)
} else {
fmt.Println("未注册cb")
}
}
func TestLua(t *testing.T) {
state := lua.NewState()
state.SetGlobal("helper", RefService(state, HelperModule{}))
fmt.Println(state.DoString(`
--调用测试
print("text=",helper.getA().getB().text())
--回调测试
local b = helper.getA().getB()
b.reg(function(val)
print("emit",val)
end)
b.emit("触发值")
`))
}
# Functions
No description provided by the author
Marshal 将go变量转换成Lua变量.
No description provided by the author
No description provided by the author
RefService 将IService模块转换成LuaTable方法.
No description provided by the author
No description provided by the author
TableToInt64List Table转[]int64.
Unmarshal Lua变量转换为GO变量.
# Constants
No description provided by the author