曹大带我学 Go(4)—— 初识 ast 的威力

本文介绍了如何利用Go语言的ast包解析规则,通过抽象语法树(AST)实现简单的规则引擎。通过示例展示了如何将规则字符串转换为AST进行遍历计算,从而避免每次更新规则都需要完整上线流程的问题。
摘要由CSDN通过智能技术生成

你好,我是小X。

曹大最近开 Go 课程了,小X 正在和曹大学 Go。

这个系列会讲一些从课程中学到的让人醍醐灌顶的东西,拨云见日,带你重新认识 Go。

抽象语法树是编译过程中的一个中间产物,一般简单了解一下就行了。但我们可以把 Go 语言的整个 parser 和 ast 包直接拿来用,在一些场景下有很大的威力。

什么是 ast 呢,我从维基百科上摘录了一段:

在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

核心就是说 ast 能以一种树的形式表示代码结构。有了树结构,就可以对它做遍历,能干很多事。

假定一个场景

假定一个场景:我们可以从司机平台的某个接口获取司机的各种特征,例如:年龄、订单数、收入、每天驾驶时长、驾龄、平均车速、被投诉次数……数据一般采用 json 来传递。

司机平台的运营小姐姐经常需要搞一些活动,例如选出:

  • 订单数超过 10000,且驾龄超过 5 年的老司机

  • 每天驾驶时小于 3 小时,且收入超过 500 的高效司机

  • 年龄大于 40,且平均速度大于 70 的“狂野”司机

  • ……

这些规则并不是固定的,经常在变化,但总归是各种司机特征的组合。

为了简化,我们选取 2 个特征,并用一个 Driver 结构体来表示:

type Driver struct {
 Orders         int
 DrivingYears   int
}

为了配合运营搞活动,我们需要根据运营给的规则来判断一个司机是否符合要求。

如果公司人多,可以安排一个 rd 专门伺候运营小姐姐,每次做活动都来手动修改代

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值