Golang Go语言中分享一个搬砖工具:动态SQL查询条件构造器

发布于 1周前 作者 sinazl 来自 Go语言

仓库地址: 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

1 回复

更多关于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查询的构建过程,还提高了代码的安全性和可读性,非常适合在复杂的应用场景中使用。

回到顶部