تم إنشاء هذه الحزمة مستوحاة من حاكم توماس لتشغيل مجموعة بسيطة من القواعد ضد كيان ما.
يتضمن هذا الإصدار بعض الميزات الإضافية بما في ذلك، و وأو المركبات والقدرة على إضافة مقارنات مخصصة.
ملاحظة : هذه الحزمة تقارن فقط بين نوعين: 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
صحيحًا إذا كانت a == b
neq
صحيحًا إذا كان a != b
lt
صحيحًا إذا كانت a < b
lte
صحيحًا إذا كانت a <= b
gt
صحيحًا إذا كان a > b
gte
صحيحًا إذا كان a >= b
contains
سيعود صحيحًا إذا a
يحتوي على b
ncontains
صحيحًا إذا كان a
لا يحتوي على b
oneof
صحيحًا إذا كان a
واحدًا من b
noneof
صحيحًا إذا لم يكن a
واحدًا من b
regex
صحيحًا إذا تطابق a
مع b
contains
و ncontains
عمل لمقارنات السلسلة الفرعية بالإضافة إلى مقارنات العناصر الموجودة في المجموعة.
عند استخدامه لمقارنات العناصر الموجودة في المجموعة، contains
أن تكون الوسيطة الأولى عبارة عن شريحة. contains
على يختلف عن oneof
من oneof
يتوقع أن تكون الوسيطة الثانية عبارة عن شريحة.
المعيار | ن | سرعة | مستخدم | يخصص |
---|---|---|---|---|
المعيار يساوي 12 | 650602549 | 5.52 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
BenchmarkNotEqual-12 | 876894124 | 4.09 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
المعيار أقل من 12 | 1000000000 | 2.84 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
المعيار أقل من يساوي 12 | 1000000000 | 2.57 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
المعيار أكبر من 12 | 1000000000 | 2.07 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
المعيار أكبر من يساوي 12 | 1000000000 | 2.86 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
معيار Regex-12 | 4524237 | 793 نانو ثانية / المرجع | 753 ب/المرجع | 11 تخصيصًا/مرجعًا |
BenchmarkRegexPhone-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 تخصيص/المرجع |
المعيار واحد من 12 | 1000000000 | 1.80 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
المعيار لا شيء من 12 | 1000000000 | 1.79 نانو ثانية / المرجع | 0 ب/المرجع | 0 تخصيص/المرجع |
BenchmarkPluckShallow-12 | 85997188 | 41.6 نانو ثانية / المرجع | 16 ب/المرجع | 1 مخصصات/المرجع |
BenchmarkPluckDeep-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 ("الترخيص")؛ لا يجوز لك استخدام هذا العمل إلا وفقًا للترخيص. يمكنك الحصول على نسخة من الترخيص في ملف الترخيص، أو على:
http://www.apache.org/licenses/LICENSE-2.0
ما لم يكن ذلك مطلوبًا بموجب القانون المعمول به أو تم الاتفاق عليه كتابيًا، يتم توزيع البرامج الموزعة بموجب الترخيص على أساس "كما هي"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص لمعرفة الأذونات والقيود التي تحكم اللغة المحددة بموجب الترخيص.