微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Go在postgres中将等于=更改为不等于<>

如何解决如何使用Go在postgres中将等于=更改为不等于<>

我有两个非常相似的SQL查询。唯一的区别是,在WHERE子句之一中,我使用的是等于(=)而不是不等于()。有没有办法以一种优雅的方式以编程方式修改查询?我正在寻找这样的东西:

func getEvents(name string,exclude bool) {
    q := `SELECT * FROM events WHERE name`
    if exclude {
        q = q + " <> "
    } else {
        q = q + " = "
    }
    q = q + "$1"

    result,err := DBQuery(q,name)
    ...
}

解决方法

一种优雅的方法是为运算符创建类型和常量:

type Op string

const (
    OpEqual       Op = "="
    OpNotEqual    Op = "<>"
    OpLessThan    Op = "<"
    OpGreaterThan Op = ">"
    // ... any other ops you need
)

然后构建查询字符串是一个简单的字符串连接:

q := "SELECT * FROM events WHERE name" + op + "$1"

或者您可以使用fmt.Sprintf()

q := fmt.Sprintf("SELECT * FROM events WHERE name %s $1",op)

当然可以将getEvents()的签名更改为:

func getEvents(name string,op Op)

现在调用getEvents()更好:

getEvents("error",OpEqual)
getEvents("error",OpNotEqual)

Go Playground上尝试示例。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。