动态 SQL 查询条件构造器
![Go Report Card](https://camo.githubusercontent.com/dda3198dc31f8a6156e29ee8d42598f6557d36bf2f6fd46d59a022761d708989/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f6c787a616e2f6669)
package main
import (
"fmt"
"github.com/lxzan/fi"
)
type Template struct {
Name string `filter:"cmp=like"`
Age int `filter:"cmp=lte"`
Height int
}
func main() {
var v = &Template{
Name: "caster",
Age: 18,
}
var filter = fi.GetFilter(v)
fmt.Printf("%s %v\n", filter.GetExpression(), filter.Args)
}
// `name` LIKE ? AND `age` <= ? [%caster% 18]
package main
import (
"fmt"
"github.com/lxzan/fi"
)
type Template struct {
Name string `filter:"cmp=like"`
Age int `filter:"cmp=lte"`
Height int
}
func main() {
var v = &Template{
Name: "caster",
Age: 18,
}
var filter = fi.
NewFilter().
Like("name", v.Name).
Lte("age", v.Age).
Eq("height", v.Height)
fmt.Printf("%s %v\n", filter.GetExpression(), filter.Args)
}
// `name` LIKE ? AND `age` <= ? [%caster% 18]
字段 |
描述 |
column |
自定义字段名; 默认值是下划线风格 |
cmp |
比较操作符; 默认值是eq |
- |
忽略 |
操作符 |
描述 |
eq |
= |
not_eq |
!= |
gt |
> |
lt |
< |
gte |
>= |
lte |
<= |
like |
LIKE |
not_like |
NOT LIKE |
in |
IN |
not_in |
NOT IN |
go test -benchmem -run=^$ -bench ^Benchmark github.com/lxzan/fi
goos: darwin
goarch: arm64
pkg: github.com/lxzan/fi
BenchmarkGetFilterReflect-8 501673 2374 ns/op 1376 B/op 37 allocs/op
BenchmarkGetFilterNoReflect-8 1650524 721.8 ns/op 1104 B/op 18 allocs/op
PASS
ok github.com/lxzan/fi 4.035s