Size: a a a

Golang Developers — русскоговорящее сообщество

2020 September 27

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
Нет
If Next is called and returns false and there are no further result sets, the Rows are closed automatically and it will suffice to check the result of Err
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
Вы на каждую строку, пришедшую из базы, формируете новый запрос и лезете в базу — это ужасно.

В моем случае у меня есть 2 таблицы, тренировки и упражнения, я не могу одним запросом вытащить из базы нужную структуру. По этому на каждую тренировку делаю запрос в бд за массивом упражнений
Ну, то что вы не можете, вовсе не значит, что это не возможно)
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
If Next is called and returns false and there are no further result sets, the Rows are closed automatically and it will suffice to check the result of Err
1. Не надо присылать тексты не из доки.
2. Автоматическое закрытие присутствует, но оно ничего вам не гарантирует. Если вы выйдете из цикла не через rows.Next(), а через break/continue/return или панику то ничего закрыто не будет. Поэтому ответ по-прежнему "нет".
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
1. Не надо присылать тексты не из доки.
2. Автоматическое закрытие присутствует, но оно ничего вам не гарантирует. Если вы выйдете из цикла не через rows.Next(), а через break/continue/return или панику то ничего закрыто не будет. Поэтому ответ по-прежнему "нет".
1. Не надо присылать тексты не из доки. - Вы только что прислали мне ссылку на rows.close() оттуда и скопировал
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
1. Не надо присылать тексты не из доки. - Вы только что прислали мне ссылку на rows.close() оттуда и скопировал
Я подумал, что вы про описание метода Next.
Да, в таком случае к первому пункту претензий нет, сорян, однако претензия к отсутствию rows.Close() от этого не теряет актуальность.
rows, err := db.Query()
if err != nil {
   ...
}
defer rows.Close()
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
Я подумал, что вы про описание метода Next.
Да, в таком случае к первому пункту претензий нет, сорян, однако претензия к отсутствию rows.Close() от этого не теряет актуальность.
rows, err := db.Query()
if err != nil {
   ...
}
defer rows.Close()
Хорошо, спасибо, возьму на заметку
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
Хорошо, спасибо, возьму на заметку
И уберите запросы в цикле.
И старайтесь никогда так не делать
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
А ещё не понятно, зачем вы на каждую ошибку отправляете её текст в stderr и завершаете программу?
В чём идея?
источник

C

Cat-in-Vacuum in Golang Developers — русскоговорящее сообщество
Прикрутите трейс к рековер паники
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Cat-in-Vacuum
Прикрутите трейс к рековер паники
Паника содержит стектрейс
источник

C

Cat-in-Vacuum in Golang Developers — русскоговорящее сообщество
Если паникует умышленно, может и не быть
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
А ещё не понятно, зачем вы на каждую ошибку отправляете её текст в stderr и завершаете программу?
В чём идея?
Тип выход не через панику, а по-правильному через код) Ну, это на самом деле просто промежуточный вариант обработки ошибок, логично, что он не нужен для прода и нужно делать что-то другое
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Cat-in-Vacuum
Если паникует умышленно, может и не быть
Ну нет же.
Стектрейса не будет только если вы отловили панику где-то.

Ну и, тем более, если б ТС паниковал умышленно, то он, пожалуй, не задавал бы в чатике вопрос о том, как найти причину паники)
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
У меня паникует, когда я делаю скан на переменную models.Exercise
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
Грит, что invalid memory address or nil pointer dereference
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
Но таже самая конструкция в другом хендлере отрабатывает без проблем
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
Тип выход не через панику, а по-правильному через код) Ну, это на самом деле просто промежуточный вариант обработки ошибок, логично, что он не нужен для прода и нужно делать что-то другое
Так делайте сразу, это же даже проще.
Просто возвращайте из функции результат и ошибку кортежем.
func f() ([]T, error) {
   ...
   if err != nil {
       return nil, fmt.Errorf("text: %w", err)
   }
   ...
}
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
Так делайте сразу, это же даже проще.
Просто возвращайте из функции результат и ошибку кортежем.
func f() ([]T, error) {
   ...
   if err != nil {
       return nil, fmt.Errorf("text: %w", err)
   }
   ...
}
О, крутое решение, спасибо огромное, возьму на заметку
источник

x

x-foby in Golang Developers — русскоговорящее сообщество
Николай
О, крутое решение, спасибо огромное, возьму на заметку
Посмотрите, как можно переписать вашу функцию.
Это не идеальный вариант, потому как тут нужно больше контекста, чтоб всё это нормально оформить.
Код может не работать, потому как я делал "на глаз", но принципы должны быть понятны.

Продумывайте, что вы пишете. Нет смысла использовать left join, если вы фильтруете по полю приджойненной таблицы, возможно, стоит на стороне базы какую-то часть вообще сразу в json агрегировать (pg это позволяет, а у вас, судя по плейсхолдерам, pg).
Короче, вариантов решения куча.
источник

Н

Николай in Golang Developers — русскоговорящее сообщество
x-foby
Ну, то что вы не можете, вовсе не значит, что это не возможно)
jsonb_pretty() ?)
источник