使用配置文件可以描述json字段的运算,包括'+','-','*','','or','and','not' 和 'if',以后可以内置一些函数可以实现流计算中的算子功能
IF 返回命中的值
package main
import (
"fmt"
"github.com/gosundy/dot"
)
type Calc struct {
calcFunc func() *dot.Value
visitor *dot.DotVisitor
}
func main() {
statement := []byte(`
if(msg.content.c.Number && msg.content.a.Number){
1
}
if (msg.content.b.Number){
2
}
if (msg.content.a.Number){
3
}
4
`)
calc := NewCalc(dot.Input(statement))
msg, err := dot.NewMsg([]byte(`{"c":0,"a":0,"b":0}`))
if err != nil {
panic(err)
}
value := calc.Calc(msg)
if value.Err != nil {
panic(err)
}
fmt.Println(value.Value)
}
func NewCalc(visitor *dot.DotVisitor, calcFunc func() *dot.Value) *Calc {
return &Calc{visitor: visitor, calcFunc: calcFunc}
}
func (calc *Calc) Calc(msg *dot.Msg) *dot.Value {
calc.visitor.Msg = msg
return calc.calcFunc()
}