このパッケージは、エンティティに対して単純なルールのセットを実行するための Thomas の go-ruler からインスピレーションを得て作成されました。
このバージョンには、AND および OR コンポジットやカスタム コンパレータを追加する機能など、さらにいくつかの機能が含まれています。
注: このパッケージは、 string
とfloat64
2 つの型のみを比較します。これは、 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
true を返しますneq
、 a != b
の場合に true を返します。a < b
の場合は true を返しlt
lte
a <= b
の場合に true を返しますa > b
の場合、 gt
true を返します。a >= b
の場合、 gte
true を返します。a
にb
含まれる場合、 contains
true を返します。a
b
含まれない場合、 ncontains
true を返します。a
がb
の 1 つである場合、 oneof
true を返します。a
がb
のいずれでもない場合、 noneof
true を返します。a
b
一致する場合、 regex
trueを返しますcontains
とncontains
、部分文字列の比較だけでなく、コレクション内のアイテムの比較にも機能します。
コレクション内のアイテムの比較に使用する場合、 contains
最初の引数がスライスであることを期待します。 contains
oneof
2 番目の引数がスライスであることを期待しているという点でoneof
とは異なります。
ベンチマーク | N | スピード | 使用済み | アロックス |
---|---|---|---|---|
ベンチマークEqual-12 | 650602549 | 5.52ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークが等しくない-12 | 876894124 | 4.09ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマーク-12 未満 | 1000000000 | 2.84ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークLessThanEqual-12 | 1000000000 | 2.57ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークGreaterThan-12 | 1000000000 | 2.07ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークGreaterThanEqual-12 | 1000000000 | 2.86ns/動作 | 0 B/op | 0 割り当て/操作 |
BenchmarkRegex-12 | 4524237 | 793ns/動作 | 753B/op | 11 割り当て/オペレーション |
ベンチマークRegexPhone-12 | 1000000 | 3338ns/動作 | 3199 ボップ | 30 割り当て/オペレーション |
BenchmarkContains-12 | 499627219 | 7.16ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークStringContains-12 | 405497102 | 8.87ns/動作 | 0 B/op | 0 割り当て/操作 |
BenchmarkContainsLong50000-12 | 18992 | 184016ns/オペレーション | 0 B/op | 0 割り当て/操作 |
BenchmarkNotContains-12 | 292932907 | 12.3ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマーク文字列が含まれていない-12 | 392618857 | 9.14ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークNotContainsLong50000-12 | 19243 | 191787 ns/オペレーション | 0 B/op | 0 割り当て/操作 |
ベンチマークOneOf-12 | 1000000000 | 1.80ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークNoneOf-12 | 1000000000 | 1.79ns/動作 | 0 B/op | 0 割り当て/操作 |
ベンチマークPluckShallow-12 | 85997188 | 41.6ns/動作 | 16B/op | 1 割り当て/操作 |
ベンチマークPluckDeep-12 | 18789103 | 194ns/動作 | 112B/op | 1 割り当て/操作 |
BenchmarkRule_evaluate-12 | 69558996 | 51.1ns/動作 | 16B/op | 1 割り当て/操作 |
BenchmarkComposite_evaluate-12 | 59484760 | 55.7ns/動作 | 16B/op | 1 割り当て/操作 |
BenchmarkEngine_Evaluate-12 | 47892318 | 75.0ns/動作 | 16B/op | 1 割り当て/操作 |
ベンチマークを実行するには:
go test -run none -bench . -benchtime 3s -benchmem
すべてのベンチマークは以下で実行されました。
MacOS High Sierra 2.6Ghz Intel Core i7 16 GB 2400 MHz DDR4
著作権 © 2019 トレバー・ハット
Apache License バージョン 2.0 (「ライセンス」) に基づいてライセンスされています。ライセンスに準拠する場合を除き、この作品を使用することはできません。ライセンスのコピーは、LICENSE ファイルまたは次の場所で入手できます。
http://www.apache.org/licenses/LICENSE-2.0
適用される法律で義務付けられている場合または書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。