Здравствуйте, использую пакет postgresql обычно получаю параметры результата запроса вот так: err := rows.Scan(&list.ID, &list.Name)
Сейчас же меня интересует получение параметров по имени, например:
Здравствуйте, получилось загрузить данные в map, но поля отсортированы по ключу, есть ли вариант как получать поля в том порядке в котором они в SQL запросе идут?
Опишите подробнее что именно и как вы делаете, создаётся стойкое ощущение, что вы делаете совсем не Go way и из-за этого возникают сложности. Возможно я смогу посоветовать как лучше сделать.
Допустим я хочу получить результат запроса SELECT id, name, age FROM Person
У меня есть структура куда я вывожу данные
Results struct {
List []map[string]interface{}
}
Код как я заполняю структуру:
rows, err := db.Queryx('SELECT id, name, age FROM Person')
for rows.Next() {
result := make(map[string]interface{})
err = rows.MapScan(result)
if err != nil {
return
}
results.List = append(results.List, result)
}
В результате я получаю map в которой поля находятся в алфавитном порядке: age, id, name
а меня интересует чтобы порядок был как в запросе: id, name, age
Это понятно по вашему вопросу. У меня такие вопросы:
- почему у вас List []map[string]interface{}, а не структура;
- для чего вам вот это "а меня интересует чтобы порядок был как в запросе: id, name, age";
Понимание ответов на эти вопросы поможет найти верное решение.
- Мне кроме названия полей нужны ещё и сами данные, потому List
- У меня задание вывести таблицу именно в таком виде как указано в запросе, без изменений, поля в запросе могут быть в любом порядке. В других языках программирования обычно есть переменная в которой отдельно лежат названия полей результата запроса, а тут вот приходится изголяться...
Вы знаете заранее структуру таблицы?
Т.е. запрос в базу идёт именно такой 'SELECT id, name, age FROM Person'?
Просто из ваших ответов по прежнему не ясно почему нельзя сделать вот так
type Person struct {
ID uint64
Name string
Age uint8
}
var results []Person
db.Select(&results, `SELECT id, name, age FROM persons`)
// тут ответить уже то, что нужно.
// у вас тут будет заполненный results
// почему так сделать нельзя?
Сбросьте пожалуйста весь код, возможно это прояснит ситуацию.