@nurzhannogerbek

Как использовать массив в запросе к базе данных из Golang?

Здравствуйте, товарищи! Помогите пожалуйста разобраться с проблемой.

В Golang приложении есть массив. В моем случаи он выглядит следующим образом [27625 27626 27627].

Я пытаюсь использовать этот массив в запросе к базе данных Oracle. Я использую библиотеку goracle для этих целей. Мой код выглядит следующим образом:
args := make([]interface{}, len(ids))

for i, id := range ids {
    args[i] = id
}

stmt := `SELECT ORGANIZATION_ID, ORGANIZATION_NAME FROM ORG WHERE ORGANIZATION_ID IN (:value` + strings.Repeat(",:value", len(args)-1) + `)`

fmt.Println(stmt)
// return: SELECT ORGANIZATION_ID, ORGANIZATION_NAME FROM ORG WHERE ORGANIZATION_ID IN (:value,:value,:value)

fmt.Println(args)
// return: [27625 27626 27627]

rows, err := database.OracleDB.Query(stmt, args); if err != nil {
    utils.ResponseWithError(responseWriter, http.StatusInternalServerError, err.Error())
    return
}


При попытке сделать запрос к базе данных вылетает следующая ошибка. Как ее исправить?

ERROR:
1. arg: unknown type []interface {}
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
выглядит так что тебе нужно вместо строки указатель на строку передавать
args[i] = &id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uvelichitel
@uvelichitel Куратор тега Go
habrahabr.ru/users/uvelichitel
Функция Query(query string, args ...interface{})ожидает несколько аргументов типа interface{}, а вы ей передаете один типа []interface{}. Для такой передачи аргументов в вариативную функцию есть синтаксический сахар
database.OracleDB.Query(stmt, args...)  //ellipses ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы