- 四则运算 +-*/ 实现;
- 逻辑运算 and or && || 实现;
- 参数传递;
- 逻辑运算符 > >= < <= ! 实现;
- 自定义方法注入;
- 优雅的错误返回;
- 自定义方法注入;
go get -u github.com/huangxingx/goexpression
cat example.go
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))
}
执行 go run example.go
1+2+3 = 6.00
Process finished with the exit code 0
文件树
➜ goexpression (main) ✗ tree
.
├── LICENSE
├── README.md
├── example
│ └── example.go
├── expression.go
├── expression_test.go
├── go.mod
├── operate
│ ├── add_operate.go
│ ├── and_operate.go
│ ├── div_operate.go
│ ├── logic_operate.go
│ ├── multi_operate.go
│ ├── operate.go
│ ├── or_operate.go
│ └── sub_operate.go
├── parse.go
├── parse_test.go
└── stack.go
go test .
➜ goexpression (main) ✗ go test .
ok github.com/huangxingx/goexpression 0.167s
go test -bench .
➜ goexpression (main) ✗ go test -bench .
goos: darwin
goarch: amd64
pkg: github.com/huangxingx/goexpression
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkAdd-12 1364682 864.0 ns/op
BenchmarkDiv-12 975276 1144 ns/op
PASS
ok github.com/huangxingx/goexpression 3.555s