이 패키지는 엔터티에 대해 간단한 규칙 세트를 실행하기 위해 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
true를 반환합니다.a != b
인 경우 neq
true를 반환합니다.a < b
이면 true를 반환합니다 lt
a <= b
인 경우 lte
true를 반환합니다.gt
a > b
이면 true를 반환합니다.a >= b
인 경우 gte
true를 반환합니다.a
b
포함하면 contains
true를 반환합니다.ncontains
a
에 b
가 포함되어 있지 않으면 true를 반환합니다.a
b
중 하나이면 oneof
true를 반환합니다.a
b
중 하나가 아닌 경우 noneof
true를 반환합니다.a
b
와 일치하면 regex
true를 반환합니다. contains
및 ncontains
컬렉션 내 항목 비교뿐만 아니라 하위 문자열 비교에도 작동합니다.
컬렉션 내 항목 비교에 사용되는 경우 contains
첫 번째 인수가 슬라이스일 것으로 예상합니다. contains
oneof
두 번째 인수를 슬라이스로 예상한다는 점에서 oneof
와 다릅니다.
기준 | N | 속도 | 사용된 | 할당 |
---|---|---|---|---|
벤치마크Equal-12 | 650602549 | 5.52ns/작업 | 0B/op | 0 할당/작업 |
BenchmarkNotEqual-12 | 876894124 | 4.09ns/작동 | 0B/op | 0 할당/작업 |
벤치마크LessThan-12 | 1000000000 | 2.84ns/작업 | 0B/op | 0 할당/작업 |
벤치마크LessThanEqual-12 | 1000000000 | 2.57ns/작업 | 0B/op | 0 할당/작업 |
벤치마크GreaterThan-12 | 1000000000 | 2.07ns/작동 | 0B/op | 0 할당/작업 |
벤치마크GreaterThanEqual-12 | 1000000000 | 2.86ns/작업 | 0B/op | 0 할당/작업 |
벤치마크Regex-12 | 4524237 | 793ns/작동 | 753B/op | 11개 할당/작업 |
벤치마크RegexPhone-12 | 1000000 | 3338ns/작동 | 3199B/연산 | 할당량/작업 30개 |
벤치마크Contains-12 | 499627219 | 7.16ns/작동 | 0B/op | 0 할당/작업 |
BenchmarkStringContains-12 | 405497102 | 8.87ns/작업 | 0B/op | 0 할당/작업 |
벤치마크ContainsLong50000-12 | 18992 | 184016ns/작동 | 0B/op | 0 할당/작업 |
BenchmarkNotContains-12 | 292932907 | 12.3ns/작동 | 0B/op | 0 할당/작업 |
벤치마크StringNotContains-12 | 392618857 | 9.14ns/작동 | 0B/op | 0 할당/작업 |
벤치마크NotContainsLong50000-12 | 19243 | 191787ns/작동 | 0B/op | 0 할당/작업 |
벤치마크OneOf-12 | 1000000000 | 1.80ns/작업 | 0B/op | 0 할당/작업 |
벤치마크NoneOf-12 | 1000000000 | 1.79ns/작동 | 0B/op | 0 할당/작업 |
벤치마크PluckShallow-12 | 85997188 | 41.6ns/작동 | 16B/연산 | 1 할당/작업 |
벤치마크PluckDeep-12 | 18789103 | 194ns/작동 | 112B/op | 1 할당/작업 |
BenchmarkRule_evaluate-12 | 69558996 | 51.1ns/작동 | 16B/연산 | 1 할당/작업 |
벤치마크Composite_evaluate-12 | 59484760 | 55.7ns/작동 | 16B/연산 | 1 할당/작업 |
BenchmarkEngine_Evaluate-12 | 47892318 | 75.0ns/작동 | 16B/연산 | 1 할당/작업 |
벤치마크를 실행하려면:
go test -run none -bench . -benchtime 3s -benchmem
모든 벤치마크는 다음에서 실행되었습니다.
MacOS High Sierra 2.6Ghz Intel Core i7 16GB 2400MHz DDR4
저작권 © 2019 Trevor Hutto
Apache 라이센스 버전 2.0("라이센스")에 따라 라이센스가 부여되었습니다. 라이센스를 준수하는 경우를 제외하고는 이 저작물을 사용할 수 없습니다. 귀하는 LICENSE 파일이나 다음 위치에서 라이센스 사본을 얻을 수 있습니다.
http://www.apache.org/licenses/LICENSE-2.0
해당 법률에서 요구하거나 서면으로 동의하지 않는 한, 라이선스에 따라 배포되는 소프트웨어는 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건 없이 "있는 그대로" 배포됩니다. 라이선스에 따른 허가 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하세요.