【问题标题】:Converting argument $1 type: unsupported type []interface {}, a slice of interface [duplicate]转换参数 $1 类型:不支持的类型 []interface {},接口切片 [重复]
【发布时间】:2019-10-31 16:41:31
【问题描述】:

我尝试查询用户 ID 列表。我正在使用 Go Pq 库。

func ListUsers(userIDs []interface{}) (users []User, err error) {
    stm := `SELECT
    U.id,
    (
        CASE WHEN TRIM(UP.first_name || ' ' || UP.last_name) = '' THEN U.id :: TEXT ELSE UP.first_name || ' ' || UP.last_name END
        ) as avatar_name,
FROM
    users AS U
        JOIN user_profiles UP ON UP.user_id = U.id
WHERE
        U.id IN ($1);`

    rows, err := postgresql.Instance.Query(stm, userIDs)
    defer rows.Close()
    if err != nil && err != sql.ErrNoRows {
        return
    }

    if err == sql.ErrNoRows {
        return users, nil
    }

    for rows.Next() {
        var (
            id         int
            AvatarName string
        )
        err = rows.Scan(&id, &AvatarName)
        if err != nil {
            return nil, err
        }

        users = append(users, User{ID: id, AvatarName: AvatarName})
    }

    return users, nil
}

当我运行它时,它会给出错误converting argument $1 type: unsupported type []interface {}, a slice of interface

【问题讨论】:

    标签: postgresql go pq


    【解决方案1】:
    • pq.Array包裹切片。
    • IN ($1) 更改为= any($1),以便可以使用数组值。

    代码如下:

        stm := `SELECT
        U.id,
        (
            CASE WHEN TRIM(UP.first_name || ' ' || UP.last_name) = '' THEN U.id :: TEXT ELSE UP.first_name || ' ' || UP.last_name END
            ) as avatar_name,
    FROM
        users AS U
            JOIN user_profiles UP ON UP.user_id = U.id
    WHERE
            U.id = any($1);`
        rows, err := postgresql.Instance.Query(stm, pq.Array(userIDs))
    

    【讨论】:

    • 非常感谢。我试图与 IN 有什么问题。
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2021-04-13
    • 2019-05-27
    • 2021-05-11
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多