sweet_dsl是基于go/parse暴露出来的API做的一个简单的规则引擎,简单点说就是一个dsl,其语法规则完全兼容Go,只是对Go的一些不必要的语法做了裁剪。
兼容大部分Go语言语法,可以认为是语法不严格的Go语言
int、float、string、map、slice
< > >= <= && || !=
for、for range、if
Println、VersionCompare、JsonEncode、JsonDecode
理论上任意函数都可以进行支持
package test
import (
"reflect"
"sweet_dsl/engine"
"testing"
)
const IfStmtScripts = `
package main
func main() {
if a == 1 {
if b == 6.0 {
return 1
}
return 10
} else {
return 3
}
return 2
}
`
func TestIfStmt(t *testing.T) {
inputPar := map[string]interface{}{
"a": 12,
"b": 6.0,
}
e := engine.NewEngin(IfStmtScripts)
res, _ := e.Run(inputPar)
if _, ok := res.(int64); !ok {
t.Error(reflect.TypeOf(res), res)
return
}
if res.(int64) != 3 {
t.Error(reflect.TypeOf(res), res)
return
}
}
如在使用过程中有需要支持的语法可以提issues或者直接联系我