由于最近将java项目迁移到go项目中, java项目中原本使用的MVEL动态脚本需要在go中找到相应的脚本语言替换. 找到了gopher-lua 测试了下性能方面还不错. github地址 https://github.com/yuin/gopher-lua
发现在lua脚本中直接调用的go中status中的属性 并修改值的话需要使用到gopher-luar 插件才能完成 插件地址https://github.com/layeh/gopher-luar
package luar_test
import (
"fmt"
"github.com/yuin/gopher-lua"
"layeh.com/gopher-luar"
)
type User struct {
Name string
token string
}
func (u *User) SetToken(t string) {
u.token = t
}
func (u *User) Token() string {
return u.token
}
const script = `
print("Hello from Lua, " .. u.Name .. "!")
u:SetToken("12345")
`
func Example_basic() {
L := lua.NewState()
defer L.Close()
u := &User{
Name: "Tim",
}
L.SetGlobal("u", luar.New(L, u))
if err := L.DoString(script); err != nil {
panic(err)
}
fmt.Println("Lua set your token to:", u.Token())
// Output:
// Hello from Lua, Tim!
// Lua set your token to: 12345
}