go语言基础学习 | 青训营笔记

35 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第4天。

今天主要学习了规则引擎的相关内容。所谓规则引擎,主要是方便程序员修改代码的逻辑,从而使得业务人员可以直接对业务进行修改,也使得程序员的维护方便的一种规则制定器。

在规则引擎的实现中,涉及到编译原理中词义分析和语法分析的内容。所谓词义分析,通俗的说,就是指输入的能够让计算机分辨出是一个词,而这个是通过自动化状态机(有限状态机)来实现。所谓语法分析,即输入的语句遵从何种语法来理解。其中一共提出了四种表达式,分别是基本表达式、加法表达式、乘法表达式和逻辑表达式。这四种表达式之间是一种递推的关系。基于这四种表达式的顺序,我们提出了语法树的概念,通过二叉树结构下的语法树的构建,我们清楚了计算机是如何辨别语句的基本含义的。

在规则引擎的具体实现当中,一方面我们需要设计出自己的规则,另一方面需要选用合适的包来实现。在选择包方面,我们使用go里面的parser包来实现。其具体代码示例如下:

`

  // 按照不同类型执行运算
  switch x.(type) {
  case int64:
     return calculateForInt(x, y, op)
  case bool:
     return calculateForBool(x, y, op)
  case string:
     return calculateForString(x, y, op)
  case error:
     return errors.New(fmt.Sprintf("%+v %+v %+v eval failed", x, op, y))
  default:
     return errors.New(fmt.Sprintf("%+v op is not support", op))
  }
复制代码

在这个学习当中,我对于go语言的规则引擎有了更深的了解,也对于go语言如何在工程中高效率的完成业务有了更深的认知。