Golang Go语言中如何解析用户输入表达式

Golang Go语言中如何解析用户输入表达式
我有一个值 i :=200,比如用户输入判断条件 " >= 100"
怎么把用户的输入转化为代码逻辑,
<br>if (i &gt;= 100 ){<br> fmt.Println("true")<br>}<br>

是不是要先用正则切割,再做字符串判断

10 回复

你这让用户输入的条件得限制的严格一些吧

更多关于Golang Go语言中如何解析用户输入表达式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


当然是用正则,Go 的正则库很好用

就是脚本解释了呗

生成脚本代码, 然后找个执行引擎执行就好了

用户输入“≈100”怎么破?

不复杂的 praser+状态工厂。 复杂的那就是一个 dsl

想要的就是这个,多谢~

https://github.com/chai2010/calculator

之前看到大佬写的 也是 yacc

在Golang(Go语言)中解析用户输入的表达式通常涉及以下几个步骤:

  1. 输入获取:使用标准库中的fmt包获取用户输入,例如通过fmt.Scanlnfmt.Scanf函数读取用户输入的字符串。

  2. 表达式解析:解析表达式可以使用现有的表达式解析库,比如govaluategovaluate支持简单的数学运算、逻辑运算以及变量替换,非常适合快速实现表达式求值。

    示例代码:

    package main
    
    import (
        "fmt"
        "github.com/Knetic/govaluate"
    )
    
    func main() {
        expression, _ := govaluate.NewEvaluableExpression("1 + 1")
        result, err := expression.Evaluate(nil)
        if err != nil {
            fmt.Println("Error evaluating expression:", err)
        } else {
            fmt.Println("Result:", result)
        }
    }
    
  3. 自定义解析器:如果需要更复杂的表达式解析,比如支持自定义函数或复杂的语法,可以考虑实现一个自定义解析器。这通常涉及词法分析(Lexical Analysis)、语法分析(Syntax Analysis)以及语义分析(Semantic Analysis)。Go语言的标准库go/tokengo/parser提供了构建解析器的基础工具,但这一方法相对复杂且耗时。

  4. 安全性考虑:解析和执行用户输入的表达式时,务必考虑安全性,防止注入攻击。使用成熟的库可以减少此类风险。

总之,根据表达式的复杂性和需求,可以选择使用现成的库或自行实现解析器。

回到顶部