Dieses Paket wurde mit der Inspiration von Thomas' Go-Ruler erstellt, um ein einfaches Regelwerk gegen eine Entität anzuwenden.
Diese Version enthält einige weitere Funktionen, darunter UND- und ODER-Verknüpfungen sowie die Möglichkeit, benutzerdefinierte Komparatoren hinzuzufügen.
Hinweis : Dieses Paket vergleicht nur zwei Typen: string
und float64
, das funktioniert gut mit 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
gibt true zurück, wenn a == b
neq
gibt true zurück, wenn a != b
lt
wird true zurückgeben, wenn a < b
lte
gibt true zurück, wenn a <= b
gt
gibt true zurück, wenn a > b
gte
gibt true zurück, wenn a >= b
contains
gibt true zurück, wenn a
b
enthältncontains
gibt true zurück, wenn a
kein b
enthältoneof
gibt true zurück, wenn a
einer von b
istnoneof
gibt true zurück, wenn a
nicht zu b
gehörtregex
gibt true zurück, wenn a
b
übereinstimmt contains
und ncontains
Arbeit für Teilzeichenfolgenvergleiche sowie Element-in-Sammlungs-Vergleiche.
Bei Verwendung für Element-in-Sammlungs-Vergleiche erwartet contains
dass das erste Argument ein Slice ist. contains
unterscheidet sich von oneof
darin, dass oneof
erwartet, dass das zweite Argument ein Slice ist.
Benchmark | N | Geschwindigkeit | Gebraucht | Zuweisungen |
---|---|---|---|---|
BenchmarkEqual-12 | 650602549 | 5,52 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkNotEqual-12 | 876894124 | 4,09 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkLessThan-12 | 1000000000 | 2,84 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkLessThanEqual-12 | 1000000000 | 2,57 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkGreaterThan-12 | 1000000000 | 2,07 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkGreaterThanEqual-12 | 1000000000 | 2,86 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkRegex-12 | 4524237 | 793 ns/op | 753 B/op | 11 Zuweisungen/Op |
BenchmarkRegexPhone-12 | 1000000 | 3338 ns/op | 3199 B/op | 30 Zuweisungen/Op |
BenchmarkContains-12 | 499627219 | 7,16 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkStringContains-12 | 405497102 | 8,87 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkContainsLong50000-12 | 18992 | 184016 k.A./op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkNotContains-12 | 292932907 | 12,3 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkStringNotContains-12 | 392618857 | 9,14 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkNotContainsLong50000-12 | 19243 | 191787 k.A./op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkOneOf-12 | 1000000000 | 1,80 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkNoneOf-12 | 1000000000 | 1,79 ns/op | 0 B/op | 0 Zuweisungen/Op |
BenchmarkPluckShallow-12 | 85997188 | 41,6 ns/op | 16 B/op | 1 Zuweisungen/Op |
BenchmarkPluckDeep-12 | 18789103 | 194 ns/op | 112 B/op | 1 Zuweisungen/Op |
BenchmarkRule_evaluate-12 | 69558996 | 51,1 ns/op | 16 B/op | 1 Zuweisungen/Op |
BenchmarkComposite_evaluate-12 | 59484760 | 55,7 ns/op | 16 B/op | 1 Zuweisungen/Op |
BenchmarkEngine_Evaluate-12 | 47892318 | 75,0 ns/op | 16 B/op | 1 Zuweisungen/Op |
So führen Sie Benchmarks durch:
go test -run none -bench . -benchtime 3s -benchmem
Alle Benchmarks wurden ausgeführt auf:
MacOS High Sierra 2,6 GHz Intel Core i7 16 GB 2400 MHz DDR4
Copyright © 2019 Trevor Hutto
Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); Sie dürfen dieses Werk nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie in der Datei LIZENZ oder unter:
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die im Rahmen der Lizenz vertriebene Software „WIE BESEHEN“ und OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend, vertrieben. Die spezifische Sprache, die die Berechtigungen und Einschränkungen im Rahmen der Lizenz regelt, finden Sie in der Lizenz.