V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
huangxingx
V2EX  ›  Go 编程语言

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

  •  
  •   huangxingx · 2021-09-28 22:03:34 +08:00 · 2174 次点击
    这是一个创建于 1158 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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))
    }
    
    6 条回复    2021-09-29 15:01:39 +08:00
    loading
        1
    loading  
       2021-09-28 22:14:43 +08:00
    你可能是需要 js eval ?
    然后我查了一下,已经有了:goeval
    masterclock
        2
    masterclock  
       2021-09-28 22:34:59 +08:00
    这一类的不少,
    github.com/antonmedv/expr 较为简单,go template 类语法
    https://github.com/google/cel-go google 的 cel,支持 protobuf 类型
    除非有特点,否则不值得投入
    huangxingx
        3
    huangxingx  
    OP
       2021-09-28 22:46:13 +08:00
    @loading 看了一下这个库的实现,感觉不是我们想要的。
    huangxingx
        4
    huangxingx  
    OP
       2021-09-28 22:48:50 +08:00
    @masterclock 嗯。这一类确实不少,我这个的思路是从 java 的 qlexpress https://github.com/alibaba/QLExpress.git 来的,用 golang 实现也是抱着学习的态度。
    vone
        5
    vone  
       2021-09-29 14:42:07 +08:00
    1 楼说的对,可以看下王垠对这类需求的思考,大部分情况下其实只是需要一个脚本语言的运行时。

    http://www.yinwang.org/blog-cn/2017/05/25/dsl
    airplayxcom
        6
    airplayxcom  
       2021-09-29 15:01:39 +08:00
    为什么要写这个
    2^2 你打算怎么算
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2715 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:16 · PVG 12:16 · LAX 20:16 · JFK 23:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.