网络上有个别关于go语言动态解析一些表达式的库,我之前用过,但感觉功能很少,比如没有支持 && 和 || 这类符号,也没有支持比较运算符(> < >= <= )这一类, 所以我自己写了一个。
其实我的目标是将这个库变成一个解释型编程语言,而不单纯只是做算术表达式运算,那样子用途其实不大。现在我已经实现了很多特性了,比如变量赋值,函数,比较运算符、算术表达式等等。
如果是使用go语言并且有这方面需要的话,完全可以直接引入这个库用于算术表达式。
使用方法,直接引入就能用:
import "github.com/pywee/lit"
exprs := []byte(`
a = (2 + 100 ^ 2 - (10*1.1 - 22 + (22 | 11))) / 10 * 2;
b = 12 / 333 + 31 + (5 / 10) - 6 | 100;
print(a);
print(b);
`)
_, err = lit.NewExpr(exprs)
// 最终输出 16 和 125 与 原生go语言是一样的
支持弱类型处理,这方面我参考了 php 和 js
src := []byte(`
a = true - 1;
b = isInt(1);
c = isFloat(1);
d = false == 0.0;
e = "false" == 0.0;
print(a); // 0
print(b); // true
print(c); // true
print(d); // true
print(e); // true
`)
_, err := lit.NewExpr(src)
传送门 https://github.com/pywee/lit
有兴趣的朋友记得 star 我一下