Golang Go语言实现的表达式计算,不断完善中,欢迎大家提出宝贵的建议 https://github.com/huangxingx/goexpression

发布于 1周前 作者 yuanlaile 来自 Go语言

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

7 回复

你可能是需要 js eval ?
然后我查了一下,已经有了:goeval

更多关于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语言以其高效、简洁和强大的并发处理能力,非常适合用于开发这类计算引擎。以下是一些建议,希望能对你的项目有所帮助:

  1. 语法解析

    • 考虑使用现有的解析库,如go/parser(虽然主要用于Go代码解析,但可以作为参考)或第三方表达式解析库,以简化语法解析部分的开发。
    • 确保支持常见的数学运算符优先级和括号嵌套。
  2. 安全性

    • 实现输入验证,防止注入攻击或执行恶意代码。对于用户输入的表达式,可以考虑使用白名单策略。
    • 限制表达式计算的最大时长和资源使用,防止恶意表达式导致服务拒绝。
  3. 性能优化

    • 使用字节码编译或解释执行与直接递归计算对比,寻找性能平衡点。
    • 考虑缓存已计算的结果,特别是频繁使用的表达式,以提升性能。
  4. 功能扩展

    • 支持自定义函数和变量,增加表达式的灵活性和实用性。
    • 允许用户定义常量或全局变量,以便在表达式中重用。
  5. 文档与测试

    • 提供详尽的文档和示例,帮助用户快速上手。
    • 编写单元测试,确保代码的正确性和稳定性。

再次感谢你的分享,期待看到你的项目不断完善,成为Go语言社区中一个有价值的资源!

回到顶部