Этот пакет был создан по мотивам го-линейки Томаса для применения простого набора правил против сущности.
Эта версия включает в себя еще несколько функций, включая составные элементы 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
eq
вернет true, если a == b
neq
вернет true, если a != b
lt
вернет true, если a < b
lte
вернет true, если a <= b
gt
вернет true, если a > b
gte
вернет true, если a >= b
contains
вернет true, если a
содержит b
ncontains
вернет true, если a
не содержит b
oneof
вернет true, если a
является одним из b
noneof
вернет true, если a
не является одним из b
regex
вернет true, если a
соответствует b
contains
и ncontains
работают для сравнения подстрок, а также для сравнения элементов в коллекции.
При использовании для сравнения элементов в коллекции, contains
ожидает, что первый аргумент будет срезом. contains
отличается от oneof
тем, что oneof
ожидает, что второй аргумент будет срезом.
Контрольный показатель | Н | Скорость | Использовал | Аллокс |
---|---|---|---|---|
БенчмаркРавно-12 | 650602549 | 5,52 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркNotEqual-12 | 876894124 | 4,09 нс/оп | 0 Б/оп | 0 выделений/операций |
Контрольный тестМеньше, чем-12 | 1000000000 | 2,84 нс/оп | 0 Б/оп | 0 выделений/операций |
Тестовый показательLessThanEqual-12 | 1000000000 | 2,57 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркGreaterThan-12 | 1000000000 | 2,07 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркGreaterThanEqual-12 | 1000000000 | 2,86 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркRegex-12 | 4524237 | 793 нс/оп | 753 б/оп | 11 выделений/опер. |
БенчмаркRegexPhone-12 | 1000000 | 3338 нс/оп | 3199 б/оп | 30 выделений/опер. |
Тест содержит-12 | 499627219 | 7,16 нс/оп | 0 Б/оп | 0 выделений/операций |
BenchmarkStringContains-12 | 405497102 | 8,87 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркСодержитLong50000-12 | 18992 | 184016 нс/оп | 0 Б/оп | 0 выделений/операций |
BenchmarkNotContains-12 | 292932907 | 12,3 нс/оп | 0 Б/оп | 0 выделений/операций |
BenchmarkStringNotContains-12 | 392618857 | 9,14 нс/оп | 0 Б/оп | 0 выделений/операций |
BenchmarkNotContainsLong50000-12 | 19243 | 191787 нс/оп | 0 Б/оп | 0 выделений/операций |
Контрольный показательOneOf-12 | 1000000000 | 1,80 нс/оп | 0 Б/оп | 0 выделений/операций |
Контрольный показательNoneOf-12 | 1000000000 | 1,79 нс/оп | 0 Б/оп | 0 выделений/операций |
БенчмаркPluckShallow-12 | 85997188 | 41,6 нс/оп | 16 Б/оп | 1 выделение/операция |
БенчмаркPluckDeep-12 | 18789103 | 194 нс/оп | 112 Б/оп | 1 выделение/операция |
BenchmarkRule_evaluate-12 | 69558996 | 51,1 нс/оп | 16 Б/оп | 1 выделение/операция |
BenchmarkComposite_evaluate-12 | 59484760 | 55,7 нс/оп | 16 Б/оп | 1 выделение/операция |
BenchmarkEngine_Evaluate-12 | 47892318 | 75,0 нс/оп | 16 Б/оп | 1 выделение/операция |
Чтобы запустить тесты:
go test -run none -bench . -benchtime 3s -benchmem
Все тесты проводились на:
MacOS High Sierra 2,6 ГГц Intel Core i7 16 ГБ 2400 МГц DDR4
© 2019 Тревор Хатто
Лицензия Apache версии 2.0 («Лицензия»); вы не можете использовать эту работу, кроме как в соответствии с Лицензией. Вы можете получить копию Лицензии в файле LICENSE или по адресу:
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется действующим законодательством или не согласовано в письменной форме, программное обеспечение, распространяемое по Лицензии, распространяется на условиях «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для определения конкретного языка, регулирующего разрешения и ограничения в рамках Лицензии.