七叶笔记 » golang编程 » golang的表达式解析组件

golang的表达式解析组件

上一篇介绍了 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)  

项目地址

相关文章