Sql 如何使用Go将postgres中的等于(=)更改为不等于(<;>;)

Sql 如何使用Go将postgres中的等于(=)更改为不等于(<;>;),sql,string,postgresql,go,Sql,String,Postgresql,Go,我有两个非常相似的sql查询。唯一的区别是,在其中一个WHERE子句中,我使用的是等于(=),而不是不等于()。有没有一种方法可以以优雅的方式以编程方式修改查询?我在找这样的东西: func getEvents(name string, exclude bool) { q := `SELECT * FROM events WHERE name` if exclude { q = q + " <> " } else {

我有两个非常相似的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)
    ...
}
func getEvents(名称字符串,排除bool){
q:=`从事件中选择*名称`
如果排除{
q=q+“”
}否则{
q=q+“=”
}
q=q+“$1”
结果,err:=DBQuery(q,name)
...
}

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

type Op string

const (
    OpEqual       Op = "="
    OpNotEqual    Op = "<>"
    OpLessThan    Op = "<"
    OpGreaterThan Op = ">"
    // ... any other ops you need
)
或者您可以使用:

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

func getEvents(name string, op Op)
调用
getEvents()
现在甚至更好了:

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

请尝试。

上的示例“我正在寻找类似于此的内容”这有什么问题?常量缺少其类型
func getEvents(name string, op Op)
getEvents("error", OpEqual)
getEvents("error", OpNotEqual)