V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Nazz
V2EX  ›  Go 编程语言

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

  •  
  •   Nazz · 281 天前 · 948 次点击
    这是一个创建于 281 天前的主题,其中的信息可能已经有所发展或是发生改变。

    仓库地址: 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
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2322 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:11 · PVG 16:11 · LAX 01:11 · JFK 04:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.