Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запросы в БД из golang при неизвестном количестве полей / 5 сообщений из 5, страница 1 из 1
13.02.2020, 00:49
    #39926062
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запросы в БД из golang при неизвестном количестве полей
Всем привет.

Как известно, результаты запросов в go из любой БД мы получаем через:

Код: plsql
1.
rows.Scan(&famStr, &nameStr, &lastname)


В этом случае мы должны быть уверены в количестве полей и их типе. А как быть, если количество произвольное и заранее мы не знаем, сколько полей выведется (например, select * from ...)? Можно как-то результаты сохранять в массив [][]interface, например или [][]string или как-то в ассоциативный массив map[string]interface?

Спасибо.
...
Рейтинг: 0 / 0
13.02.2020, 01:47
    #39926069
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запросы в БД из golang при неизвестном количестве полей
Alexey Agafonov,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
func (rs *Rows) Scan(dest ...interface{}) error {
  3022  	rs.closemu.RLock()
  3023  
  3024  	if rs.lasterr != nil && rs.lasterr != io.EOF {
  3025  		rs.closemu.RUnlock()
  3026  		return rs.lasterr
  3027  	}
  3028  	if rs.closed {
  3029  		err := rs.lasterrOrErrLocked(errRowsClosed)
  3030  		rs.closemu.RUnlock()
  3031  		return err
  3032  	}
  3033  	rs.closemu.RUnlock()
  3034  
  3035  	if rs.lastcols == nil {
  3036  		return errors.New("sql: Scan called without calling Next")
  3037  	}
  3038  	if len(dest) != len(rs.lastcols) {
  3039  		return fmt.Errorf("sql: expected %d destination arguments in Scan, not %d", len(rs.lastcols), len(dest))
  3040  	}
  3041  	for i, sv := range rs.lastcols {
  3042  		err := convertAssignRows(dest[i], sv, rs)
  3043  		if err != nil {
  3044  			return fmt.Errorf(`sql: Scan error on column index %d, name %q: %v`, i, rs.rowsi.Columns()[i], err)
  3045  		}
  3046  	}
  3047  	return nil
  3048  }
...
Рейтинг: 0 / 0
13.02.2020, 13:20
    #39926223
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запросы в БД из golang при неизвестном количестве полей
ViPRos,

спасибо, после размещения поста я нашел много решений, во всех присутствует

Код: plsql
1.
dest ...interface{}


Но Ваше решение самое интересное, обработка всех ошибок, фактически, промышленное, можно этот кусок сразу в прод. Спасибо!
...
Рейтинг: 0 / 0
13.02.2020, 13:31
    #39926234
ViPRos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запросы в БД из golang при неизвестном количестве полей
Alexey Agafonov,

это и есть "прод" :)
исходники Go
...
Рейтинг: 0 / 0
13.02.2020, 13:49
    #39926247
Alexey Agafonov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запросы в БД из golang при неизвестном количестве полей
ViPRos,

что-то об этом я не подумал, чуть было в функцию копипастом не обернул. Проверил, лаже номера строк сходятся :-) Еще раз спасибо!
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Запросы в БД из golang при неизвестном количестве полей / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]