แพ็คเกจนี้สร้างขึ้นด้วยแรงบันดาลใจจากผู้ปกครองของ Thomas เพื่อใช้ชุดกฎง่ายๆ กับเอนทิตี
เวอร์ชันนี้มีคุณสมบัติเพิ่มเติมอีกสองสามอย่าง รวมถึง 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
จะคืนค่าเป็นจริงถ้า 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.52ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานไม่เท่ากับ-12 | 876894124 | 4.09ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานน้อยกว่า-12 | 1000000000 | 2.84ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานLessThanEqual-12 | 1000000000 | 2.57ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐาน GreaterThan-12 | 1000000000 | 2.07ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐาน GreaterThanEqual-12 | 1000000000 | 2.86ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐาน Regex-12 | 4524237 | 793ns/ปฏิบัติการ | 753 บ/ปฏิบัติการ | จัดสรร 11 ครั้ง/ปฏิบัติการ |
เกณฑ์มาตรฐาน RegexPhone-12 | 1000000 | 3338ns/ปฏิบัติการ | 3199 บ/ตร | 30 จัดสรร/op |
เกณฑ์มาตรฐานประกอบด้วย-12 | 499627219 | 7.16ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
BenchmarkStringContains-12 | 405497102 | 8.87ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานประกอบด้วย Long50000-12 | 18992 | 184016ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานไม่มี-12 | 292932907 | 12.3ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
BenchmarkStringNotContains-12 | 392618857 | 9.14ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานไม่มี Long50000-12 | 19243 | 191787 ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานหนึ่งใน 12 | 1000000000 | 1.80ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานไม่มีของ-12 | 1000000000 | 1.79ns/ปฏิบัติการ | 0 บ/ปฏิบัติการ | 0 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐาน PluckShallow-12 | 85997188 | 41.6ns/ปฏิบัติการ | 16 บ/ปฏิบัติการ | 1 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐาน PluckDeep-12 | 18789103 | 194ns/ปฏิบัติการ | 112 บ/ปฏิบัติการ | 1 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานRule_evaluate-12 | 69558996 | 51.1ns/ปฏิบัติการ | 16 บ/ปฏิบัติการ | 1 จัดสรร/ปฏิบัติการ |
เกณฑ์มาตรฐานComposite_evaluate-12 | 59484760 | 55.7ns/ปฏิบัติการ | 16 บ/ปฏิบัติการ | 1 จัดสรร/ปฏิบัติการ |
BenchmarkEngine_Evaluate-12 | 47892318 | 75.0ns/ปฏิบัติการ | 16 บ/ปฏิบัติการ | 1 จัดสรร/ปฏิบัติการ |
หากต้องการเรียกใช้การวัดประสิทธิภาพ:
go test -run none -bench . -benchtime 3s -benchmem
การวัดประสิทธิภาพทั้งหมดดำเนินการบน:
MacOS เซียร์ราสูง 2.6Ghz Intel Core i7 16 GB 2400 MHz DDR4
ลิขสิทธิ์ © 2019 เทรเวอร์ ฮัตโต
ได้รับอนุญาตภายใต้ Apache License เวอร์ชัน 2.0 ("ใบอนุญาต"); คุณไม่สามารถใช้งานนี้ได้เว้นแต่จะเป็นไปตามใบอนุญาต คุณอาจได้รับสำเนาใบอนุญาตในไฟล์ใบอนุญาตหรือที่:
http://www.apache.org/licenses/LICENSE-2.0
เว้นแต่กฎหมายที่ใช้บังคับกำหนดหรือตกลงเป็นลายลักษณ์อักษร ซอฟต์แวร์ที่เผยแพร่ภายใต้ใบอนุญาตนี้จะถูกแจกจ่าย "ตามที่เป็น" โดยไม่มีการรับประกันหรือเงื่อนไขใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ดูใบอนุญาตสำหรับภาษาเฉพาะที่ควบคุมการอนุญาตและข้อจำกัดภายใต้ใบอนุญาต