Size: a a a

2020 December 08

s

serg in Go-go!
Марк Егоров
Ошибка, да. Но у нас может в функции осуществляться поиск пользователя. Ошибок нет, просто пользователя нет - и данных нет.

Что нам делать с этим.

В петоне, и в ряде случаев голанга можно в функции писать, что или что-то или nil.
использовать списочный контекст. тогда все автоматом встанет на свои места и все вопросы про конкретное значение переменной пропадут
источник

DP

Daniel Podolsky in Go-go!
Переслано от Artem Diakonov
источник

DP

Daniel Podolsky in Go-go!
Переслано от Artem Diakonov
Интересуешься темой разработки и поддержки высоконагруженных приложений, связанных с финансовыми инструментами? Онлайн-митап ВТБ – специально для тебя!
17 декабря пройдет онлайн-митап “Как обеспечить надежность мобильного приложения при увеличении нагрузки в 10 раз”. Участие бесплатное.

Предварительная регистрация поможет не забыть о митапе и получить материалы после - https://clck.ru/SMuCA
источник

DM

Dmitry M in Go-go!
Марк Егоров
Ошибка, да. Но у нас может в функции осуществляться поиск пользователя. Ошибок нет, просто пользователя нет - и данных нет.

Что нам делать с этим.

В петоне, и в ряде случаев голанга можно в функции писать, что или что-то или nil.
Вернуть условную ошибку ErrNoUser
источник

М

Марк Егоров... in Go-go!
serg
использовать списочный контекст. тогда все автоматом встанет на свои места и все вопросы про конкретное значение переменной пропадут
ммм, где мне про это почитать?
источник

s

serg in Go-go!
Марк Егоров
ммм, где мне про это почитать?
да просто не конкретное значение возвращать, а список значений. если ничего не найдено, список будет пустой
источник

DP

Daniel Podolsky in Go-go!
Dmitry M
Вернуть условную ошибку ErrNoUser
ну вот это как раз плохой вариант. ошибка, которая не ошибка.

если может быть “не нашлось”, а может и ошибка - надо  (user, bool, error) возвращать
источник

М

Марк Егоров... in Go-go!
serg
да просто не конкретное значение возвращать, а список значений. если ничего не найдено, список будет пустой
То есть, предлагаете просто отказаться от возвращений пользовательских типов данных  в принципе?
источник

М

Марк Егоров... in Go-go!
источник

V

Vlad in Go-go!
Марк Егоров
То есть, предлагаете просто отказаться от возвращений пользовательских типов данных  в принципе?
Если функция возвращает одного клиента, можно nil вернуть. А если возвращает список, то список юзеров (пустой если не найдено)
источник

s

serg in Go-go!
смотрите. это просто два разных подхода к работе с данными. либо использовать прослойку, которая возвращает вам список значений (ну, например, дай мне всех пользователей с таким-то списком айдишников, или такими-то именами). То, что ничего не найдено - это не ошибка. Это результат поиска. Ошибка это или нет - должен решать тот, кто принимал решение о поиске.
Второй варианта - это когда модель сама себя ищет. Например, дай мне юзера с таким-то айдишником. В этом случае уместно возвращать 2 значения. Сам результат и ошибку.
источник

М

Марк Егоров... in Go-go!
Daniel Podolsky
ну вот это как раз плохой вариант. ошибка, которая не ошибка.

если может быть “не нашлось”, а может и ошибка - надо  (user, bool, error) возвращать
Вариант с тремя переменными выглядит неплохо. Во всяком случае его можно масштабировать и понятно как использовать везде.

Другое дело, является ли это неким общепринятым вариантом или нет.
источник

DP

Daniel Podolsky in Go-go!
с двумя - точно общепринятый
источник

DP

Daniel Podolsky in Go-go!
с тремя - реже.

обычно первой тогда возвращают указатель, и nil означает, что ничего не найдено

если вы можете возвращать указатель - можно ак и делать
источник

М

Марк Егоров... in Go-go!
Просто, возможно(!), мне кто-нибудь скажет: чувак, никто не возвращает пользовательские типы данных потому что тебе надо этот структ выносить глобально, он не может быть nil, непонятно как нормально его сравнивать в каждом случае. Поэтому просто не возвращай - и нет проблем.
источник

М

Марк Егоров... in Go-go!
Я просто предполагаю и такой вариант
источник

D

Denis in Go-go!
Daniel Podolsky
ну вот это как раз плохой вариант. ошибка, которая не ошибка.

если может быть “не нашлось”, а может и ошибка - надо  (user, bool, error) возвращать
mongo.ErrNoDocuments
источник

DP

Daniel Podolsky in Go-go!
Denis
mongo.ErrNoDocuments
даже io.EOF есть.

но это не делает эти варианты хорошими
источник

D

Denis in Go-go!
Daniel Podolsky
даже io.EOF есть.

но это не делает эти варианты хорошими
+. Например в монге эта ошибка возвращается только в FindOne, а если ничего не найдено в Find это типа норм, пустой слайс и без ошибки
источник

DM

Dmitry M in Go-go!
sql.ErrNoRows, но это дело вкуса
источник