Paket ini dibuat dengan inspirasi dari penguasa Thomas untuk menjalankan serangkaian aturan sederhana terhadap suatu entitas.
Versi ini mencakup beberapa fitur lainnya termasuk, komposit AND dan OR dan kemampuan untuk menambahkan pembanding khusus.
Catatan : Paket ini hanya membandingkan dua jenis: string
dan float64
, ini cocok dengan 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
akan mengembalikan nilai true jika a == b
neq
akan mengembalikan nilai true jika a != b
lt
akan mengembalikan nilai true jika a < b
lte
akan mengembalikan nilai true jika a <= b
gt
akan mengembalikan nilai true jika a > b
gte
akan mengembalikan nilai true jika a >= b
contains
akan mengembalikan nilai benar jika a
berisi b
ncontains
akan mengembalikan nilai true jika a
tidak mengandung b
oneof
akan mengembalikan nilai true jika a
adalah salah satu dari b
noneof
yang akan mengembalikan nilai benar jika a
bukan salah satu dari b
regex
akan mengembalikan nilai true jika a
cocok dengan b
contains
dan ncontains
berfungsi untuk perbandingan substring serta perbandingan item dalam koleksi.
Saat digunakan untuk perbandingan item dalam koleksi, contains
mengharapkan argumen pertama berupa potongan. contains
berbeda dari oneof
di mana oneof
mengharapkan argumen kedua menjadi sebuah irisan.
Tolok ukur | N | Kecepatan | Digunakan | Alokasi |
---|---|---|---|---|
Tolok Ukur Sama dengan-12 | 650602549 | 5,52 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurTidak Sama dengan-12 | 876894124 | 4,09 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur Kurang Dari-12 | 1000000000 | 2,84 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur Kurang Dari Sama Dengan-12 | 1000000000 | 2,57 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur Lebih Besar Dari-12 | 1000000000 | 2,07 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur Lebih Besar Dari Sama Dengan 12 | 1000000000 | 2,86 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurRegex-12 | 4524237 | 793 ns/operasi | 753 B/operasi | 11 alokasi/operasi |
Tolok UkurRegexPhone-12 | 1000000 | 3338 ns/operasi | 3199 B/op | 30 alokasi/operasi |
Tolok Ukur Berisi-12 | 499627219 | 7,16 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
BenchmarkStringBerisi-12 | 405497102 | 8,87 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur Berisi Panjang 50000-12 | 18992 | 184016 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurTidak Berisi-12 | 292932907 | 12,3 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
BenchmarkStringNotContains-12 | 392618857 | 9,14 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurTidak BerisiPanjang50000-12 | 19243 | 191787 ns/op | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurSatu Dari-12 | 1000000000 | 1,80 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok UkurNoneOf-12 | 1000000000 | 1,79 ns/operasi | 0 B/operasi | 0 alokasi/operasi |
Tolok Ukur PluckShallow-12 | 85997188 | 41,6 ns/operasi | 16 B/operasi | 1 alokasi/operasi |
BenchmarkPluckDeep-12 | 18789103 | 194 ns/operasi | 112 B/operasi | 1 alokasi/operasi |
BenchmarkRule_evaluate-12 | 69558996 | 51,1 ns/operasi | 16 B/operasi | 1 alokasi/operasi |
BenchmarkComposite_evaluate-12 | 59484760 | 55,7 ns/operasi | 16 B/operasi | 1 alokasi/operasi |
BenchmarkEngine_Evaluate-12 | 47892318 | 75,0 ns/operasi | 16 B/operasi | 1 alokasi/operasi |
Untuk menjalankan tolok ukur:
go test -run none -bench . -benchtime 3s -benchmem
Semua tolok ukur dijalankan pada:
MacOS High Sierra 2.6Ghz Intel Core i7 16GB 2400MHz DDR4
Hak Cipta © 2019 Trevor Hutto
Berlisensi di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); Anda tidak boleh menggunakan karya ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh salinan Lisensi dalam file LISENSI, atau di:
http://www.apache.org/licenses/LICENSE-2.0
Kecuali diwajibkan oleh undang-undang yang berlaku atau disetujui secara tertulis, perangkat lunak yang didistribusikan berdasarkan Lisensi didistribusikan berdasarkan DASAR "APA ADANYA", TANPA JAMINAN ATAU KETENTUAN DALAM BENTUK APAPUN, baik tersurat maupun tersirat. Lihat Lisensi untuk bahasa tertentu yang mengatur izin dan batasan berdasarkan Lisensi.