下面是查询语句 ,是不是因为又在后面通过 if 拼接了含有参数的语句?

countStr := "SELECT COUNT(*) AS count FROM bill AS BH WHERE (BH.type = 1 OR BH.type = 2)"
    params := []interface{}{}
    if start != "" && end != "" {
        countStr += " AND BH.t >= ? AND BH.t <= ?"
        params = append(params, start, end)
    }
    if len(names) > 0 {
        countStr += " AND BH.user_id IN (?" + strings.Repeat(",?", len(names)-1) + ")"
        params = append(params, names)

    }
    if err := db.Raw(countStr, params...).Scan(&result).Error; err != nil {
        return nil, err
    }

Comment From: easternK

请问能这样拼接sql么。我也是需要通过判断参数来拼接sql语句

Comment From: zhangshp

能拼接,但是要注意interface slice与其他具体类型的slice的区别。

Comment From: letmetodo

您这里说的是什么意思可以说下么?我在where条件中如果传入 interface slice 会报 sql: expected 55 arguments, got 28 传入string slice表现正常,您说的是一个事情么