Golang Go语言中分享一个搬砖工具:动态SQL查询条件构造器
仓库地址: 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
Golang Go语言中分享一个搬砖工具:动态SQL查询条件构造器
更多关于Golang Go语言中分享一个搬砖工具:动态SQL查询条件构造器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中分享一个搬砖工具:动态SQL查询条件构造器的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,处理动态SQL查询条件时,使用构造器可以极大地提高代码的灵活性和可维护性。下面分享一个实用的动态SQL查询条件构造器工具,它能帮助你优雅地构建复杂的查询条件。
这个工具的核心思想是通过链式调用构建查询条件,使得代码更加直观和易读。你可以根据需要添加多个条件,每个条件都支持逻辑运算(如AND、OR),并且可以灵活地处理各种数据类型(如字符串、数字、日期等)。
以下是一个简单的示例:
package main
import (
"fmt"
"your_package_path/querybuilder" // 假设这是你的构造器包路径
)
func main() {
builder := querybuilder.New()
builder.AddCondition("name", "=", "John").
AddCondition("age", ">", 30, "AND").
AddCondition("created_at", "<=", "2023-01-01", "OR")
sql, params, err := builder.Build()
if err != nil {
fmt.Println("Error building query:", err)
}
fmt.Println("SQL:", sql)
fmt.Println("Params:", params)
}
在这个示例中,querybuilder.New()
创建了一个新的构造器实例,然后通过 AddCondition
方法添加条件。每个条件都可以指定字段名、操作符、值和逻辑运算符。最后,Build
方法将构造的查询条件和参数输出为SQL语句和参数列表。
这样的构造器不仅简化了SQL查询的构建过程,还提高了代码的安全性和可读性,非常适合在复杂的应用场景中使用。