grules
v1.4.0
该包的创建灵感来自 Thomas 的 go-ruler,用于针对实体运行一组简单的规则。
该版本包含更多功能,包括 AND 和 OR 复合以及添加自定义比较器的能力。
注意:这个包只比较两种类型: string
和float64
,这与encoding/json
配合得很好。
// Create a new instance of an engine with some default comparators
e , err := NewJSONEngine ( json . RawMessage ( `{"composites":[{"operator":"or","rules":[{"comparator":"always-false","path":"user.name","value":"Trevor"},{"comparator":"eq","path":"user.name","value":"Trevor"}]}]}` ))
if err != nil {
panic ( err )
}
// Add a new, custom comparator
e = e . AddComparator ( "always-false" , func ( a , b interface {}) bool {
return false
})
// Give some properties, this map can be deeper and supports interfaces
props := map [ string ] interface {}{
"user" : map [ string ] interface {}{
"name" : "Trevor" ,
}
}
// Run the engine on the props
res := e . Evaluate ( props )
// res == true
a == b
则eq
将返回 truea != b
neq
将返回 truea < b
lt
返回 truea <= b
lte
将返回 truea > b
则gt
将返回 truea >= b
gte
将返回 truea
包含b
contains
将返回 truea
不包含b
ncontains
将返回truea
是b
之一, oneof
将返回 truea
不是b
之一,则noneof
将返回 truea
与b
匹配, regex
将返回 true contains
和ncontains
适用于子字符串比较以及集合中的项目比较。
当用于集合中的项目比较时, contains
期望第一个参数是切片。 contains
与oneof
不同, oneof
期望第二个参数是切片。
基准 | 氮 | 速度 | 用过的 | 分配 |
---|---|---|---|---|
BenchmarkEqual-12 | 650602549 | 5.52 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
BenchmarkNotEqual-12 | 876894124 | 4.09 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准小于 12 | 100亿 | 2.84 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准小于等于-12 | 100亿 | 2.57 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准GreaterThan-12 | 100亿 | 2.07 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准大于等于 12 | 100亿 | 2.86 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
BenchmarkRegex-12 | 4524237 | 793 纳秒/操作 | 753 B/操作 | 11 个分配/操作 |
BenchmarkRegexPhone-12 | 1000000 | 3338 纳秒/操作 | 3199 B/op | 30 个分配/操作 |
BenchmarkContains-12 | 499627219 | 7.16 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
BenchmarkStringContains-12 | 405497102 | 8.87 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准包含Long50000-12 | 18992 | 184016 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
BenchmarkNotContains-12 | 292932907 | 12.3 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
BenchmarkStringNotContains-12 | 392618857 | 9.14 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准不包含Long50000-12 | 19243 | 191787 ns/操作 | 0 B/操作 | 0 分配/操作 |
基准OneOf-12 | 100亿 | 1.80 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准NoneOf-12 | 100亿 | 1.79 纳秒/操作 | 0 B/操作 | 0 分配/操作 |
基准PluckShallow-12 | 85997188 | 41.6 纳秒/操作 | 16 B/操作 | 1 个分配/操作 |
基准PluckDeep-12 | 18789103 | 194 纳秒/操作 | 112 B/操作 | 1 个分配/操作 |
BenchmarkRule_evaluate-12 | 69558996 | 51.1 纳秒/操作 | 16 B/操作 | 1 个分配/操作 |
BenchmarkComposite_evaluate-12 | 59484760 | 55.7 纳秒/操作 | 16 B/操作 | 1 个分配/操作 |
BenchmarkEngine_Evaluate-12 | 47892318 | 75.0 纳秒/操作 | 16 B/操作 | 1 个分配/操作 |
运行基准测试:
go test -run none -bench . -benchtime 3s -benchmem
所有基准测试均在以下平台上运行:
MacOS High Sierra 2.6Ghz 英特尔酷睿 i7 16 GB 2400 MHz DDR4
版权所有 © 2019 特雷弗·胡托
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可,否则您不得使用本作品。您可以在许可证文件中获取许可证的副本,或者从以下位置获取:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不带任何明示或暗示的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。