Golang Go语言实现的表达式计算,不断完善中,欢迎大家提出宝贵的建议 https://github.com/huangxingx/goexpression
Golang Go语言实现的表达式计算,不断完善中,欢迎大家提出宝贵的建议
https://github.com/huangxingx/goexpression
package main
import (
“fmt”
"github.com/huangxingx/goexpression"
)
func main() {
expressStr := “1+2+3”
exp := goexpression.NewExpress(expressStr)
result := exp.Execute(nil)
fmt.Printf("%s = %.2f", expressStr, result.(float64))
}
更多关于Golang Go语言实现的表达式计算,不断完善中,欢迎大家提出宝贵的建议 https://github.com/huangxingx/goexpression的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这一类的不少,
github.com/antonmedv/expr 较为简单,go template 类语法
https://github.com/google/cel-go google 的 cel,支持 protobuf 类型
除非有特点,否则不值得投入
看了一下这个库的实现,感觉不是我们想要的。
嗯。这一类确实不少,我这个的思路是从 java 的 qlexpress https://github.com/alibaba/QLExpress.git 来的,用 golang 实现也是抱着学习的态度。
1 楼说的对,可以看下王垠对这类需求的思考,大部分情况下其实只是需要一个脚本语言的运行时。
http://www.yinwang.org/blog-cn/2017/05/25/dsl
为什么要写这个
2^2 你打算怎么算
非常感谢你分享这个关于使用Golang实现表达式计算的项目!Go语言以其高效、简洁和强大的并发处理能力,非常适合用于开发这类计算引擎。以下是一些建议,希望能对你的项目有所帮助:
-
语法解析:
- 考虑使用现有的解析库,如
go/parser
(虽然主要用于Go代码解析,但可以作为参考)或第三方表达式解析库,以简化语法解析部分的开发。 - 确保支持常见的数学运算符优先级和括号嵌套。
- 考虑使用现有的解析库,如
-
安全性:
- 实现输入验证,防止注入攻击或执行恶意代码。对于用户输入的表达式,可以考虑使用白名单策略。
- 限制表达式计算的最大时长和资源使用,防止恶意表达式导致服务拒绝。
-
性能优化:
- 使用字节码编译或解释执行与直接递归计算对比,寻找性能平衡点。
- 考虑缓存已计算的结果,特别是频繁使用的表达式,以提升性能。
-
功能扩展:
- 支持自定义函数和变量,增加表达式的灵活性和实用性。
- 允许用户定义常量或全局变量,以便在表达式中重用。
-
文档与测试:
- 提供详尽的文档和示例,帮助用户快速上手。
- 编写单元测试,确保代码的正确性和稳定性。
再次感谢你的分享,期待看到你的项目不断完善,成为Go语言社区中一个有价值的资源!