Expr 是一种以 Go 为中心的表达式语言,旨在以无与伦比的准确性、安全性和速度提供动态配置。
// Allow only admins and moderators to moderate comments.
user.Group in ["admin", "moderator"] || user.Id == comment.UserId
// Ensure all tweets are less than 240 characters.
all(Tweets, .Size <= 240)
特性
- 内存安全:Expr 的设计注重安全性,确保程序不会访问不相关的内存或引入内存漏洞
- 无副作用:在 Expr 中计算的表达式仅根据输入计算输出,确保不会产生可能改变状态或产生意外结果的副作用
- 防止无限循环,确保每个程序都会在合理的时间内结束
- 与 Go 无缝集成:将 Expr 集成到 Go 项目中,无需重新定义类型
示例代码
package main
import (
"fmt"
"github.com/antonmedv/expr"
)
func main() {
env := map[string]interface{}{
"greet": "Hello, %v!",
"names": []string{"world", "you"},
"sprintf": fmt.Sprintf,
}
code := `sprintf(greet, names[0])`
program, err := expr.Compile(code, expr.Env(env))
if err != nil {
panic(err)
}
output, err := expr.Run(program, env)
if err != nil {
panic(err)
}
fmt.Println(output)
}
评论