Expr is an engine that can evaluate expressions.
The purpose of the package is to allow users to use expressions inside configuration for more complex logic. It is a perfect candidate for the foundation of a business rule engine. The idea is to let configure things in a dynamic way without recompile of a program:
# Get the special price if
user.Group in ["good_customers", "collaborator"]
# Promote article to the homepage when
len(article.Comments) > 100 and article.Category not in ["misc"]
# Send an alert when
product.Stock < 15Inspired by
- Symfony's The ExpressionLanguage component,
 - Rob Pike's talk Lexical Scanning in Go.
 
- Works with any valid Go object (structs, maps, etc)
 - Static and dynamic typing (example)
code := "groups[0].Title + user.Age" p, err := expr.Parse(code, expr.Define("groups", []Group{}), expr.Define("user", User{})) // err: invalid operation: groups[0].Name + user.Age (mismatched types string and int)
 - User-friendly error messages
unclosed "(" (boo + bar] ----------^ - Reasonable set of basic operators
 - Fast (faster otto and goja, see bench)
 
go get -u github.com/antonmedv/expr
- See 
for developer documentation,
 - See The Expression Syntax page to learn the syntax of the Expr expressions.
 
MIT
