Как передать идентификаторы переменных в Statement.Query () в Голанге? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть этот запрос в postgres, который запрашивает 1 или n пользователей на основе переданных параметров:

select name, phone from clients where id in ('id1','id2')

Теперь, когда я пытаюсь использовать это на golang, у меня возникают проблемы с приближением, как передать этот типпеременных аргументов для оператора Statement.Query ():

ids := []string{"0aa6c0c5-e44e-4187-b128-6ae4b2258df0", "606b0182-269f-469a-bb29-26da4fa0302b"}
rows, err := stmt.Query(ids...)

Это выдает ошибку: Cannot use 'ids' (type []string) as type []interface{}

Когда я проверяю запрос исходного кода, он может получить много переменных типа interface:

func (s *Stmt) Query(args ...interface{}) (*Rows, error) {
    return s.QueryContext(context.Background(), args...)
}

Если я сделаю это вручную, это сработает:

rows, err := stmt.Query("0aa6c0c5-e44e-4187-b128-6ae4b2258df0", "606b0182-269f-469a-bb29-26da4fa0302b")

Но, конечно, мне нужно, чтобы аргументы были равны 1 или более и динамически генерировались.

Я использую Sqlx lib.

1 Ответ

0 голосов
/ 13 октября 2018

Как видно из схемы метода Query(), а также из сообщения об ошибке, для метода требуется аргумент типа []interface{} ( variadic interface{}).

func (s *Stmt) Query(args ...interface{}) (*Rows, error) {
    return s.QueryContext(context.Background(), args...)
}

В вашем коде переменная ids содержит данные []string.Измените его на []interface{}, чтобы оно соответствовало Query() требованиям, затем оно будет работать.

ids := []interface{}{"0aa6c0c5-e44e-4187-b128-6ae4b2258df0", "606b0182-269f-469a-bb29-26da4fa0302b"}
rows, err := stmt.Query(ids...)
...