Nazz
V2EX  ›  Go 编程语言

分享一个搬砖工具: 动态 SQL 查询条件构造器

By Nazz at 2023 年 7 月 27 日 · 1816 次点击

仓库地址: https://github.com/lxzan/fi

动态 SQL 查询条件构造器, 默认跳过空指针和类型零值

反射模式

package main

import (
	"github.com/lxzan/fi"
)

type Request struct {
	StartTime int64  `filter:"cmp=gte"`
	EndTime   int64  `filter:"cmp=lt"`
	Name      string `filter:"cmp=eq"`
}

func main() {
	v := &Request{StartTime: 1, Name: "aha"}
	f := fi.GetFilter(v)
	println(f.GetExpression())
}
`start_time` >= ? AND `name` = ?

手动模式:

func (c *Request) GetFilter() *fi.Filter {
	return fi.
		NewFilter().
		Gte("start_time", c.StartTime).
		Lt("end_time", c.EndTime).
		Eq("name", c.Name)
}

性能测试 (10 个字段)

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
目前尚无回复
The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
© 2026 V2EX · 22ms · 3.9.8.5