您现在的位置是:首页 > 文章详情

Expr —— Go 表达式语言

日期:2023-08-21点击:414

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)
}
原文链接:https://www.oschina.net/p/expr
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章