上一篇介绍了 golang中的日志组件 loggo, golang里的日志工具log4go ,今天来推荐一款在golang中的简单的 EL 解析器 expression4go
该组件主要进行 expression 文字表达式的计算解析,通过文字的表达式来动态的进行公式或者脚本的变量计算。
给个例子比如
context.AddPropertyAccessor(MapAccessor{})
m["name"] = "expression4go"
m["age"] = 1
//
//Map1 := make( Map [string]interface{})
//m["map"] = map1
//map1["name"] = "davidliu"
//map1["age"] = 10
context.SetVariables(m)
parser := SpelExpressionParser{}
expressionString := "#{name}"
//expressionString := "#name=='lisi'"
//expressionString := "#name" //返回lisi
valueContext := parser.ParseExpression(expressionString).GetValueContext(&context)
fmt.Println(valueContext)
分为三步
定义表达式
expressionString := “#{name}”
准备上下文
m[“name”] = “expression4go”
m[“age”] = 1
context.SetVariables(m)
获取表达式值
valueContext := parser.ParseExpression(expressionString).GetValueContext(&context)
在这里通过文本直接进行动态的计算
支持 Struct ,Map,Array,Slice的计算
context.AddPropertyAccessor(MapAccessor{})
m1 := make(map[string]interface{})
m["name"] = "expression4go"
m["age"] = 1
//切片
//orders := make([]Order, 2)
//数组
orders := [2]Order{}
orders[0] = Order{name: "expression4go-1", num: 12}
orders[1] = Order{name: "expression4go-2", num: 24}
m1["code"] = orders
m["order"] = m1
context.SetVariables(m)
expressionString := "${order.code[0].name}"
valueContext := parser.ParseExpression(expressionString).GetValueContext(&context)
fmt.Println("结果为", valueContext)
项目地址