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

2023 年 7 月 27 日
 Nazz

仓库地址: 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
1573 次点击
所在节点    Go 编程语言
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960253

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX