Alexander
0. Я бы русский убрал из кода (логи, комментарии). Но это мой вкус, что не должно быть русского в таких вещах. 1. https://github.com/CookieNyanCloud/avito-backend-test/tree/master/pkg - что это за остатки? и почему подключение не в интернал? 2. https://github.com/CookieNyanCloud/avito-backend-test/blob/master/internal/app/app.go - ненужные комментарии, если не можешь 3. https://github.com/CookieNyanCloud/avito-backend-test/blob/master/internal/repository/repository.go - я не согласен, что это один класс и один файл. 3.1. с ошибками неверно обращаешься, проверять err.Error() == someConst неверно: var errShitHappened = errors.New("shit happened") // return errShitHappened // if err == errShitHappened{ 3.2. не вижу смысла в (и дальнейших Sprintf): const ( financeTable = "userbalance" transactionTable = "transactions" )
Maxim
Допустим 100 рублей на счету, делаете селект, в этот момент проходит зачислением 2 транзакции +10, без транзакци и update sum+10, может баланс разъехаться
Emil
Ну, теперь не так обидно, буду смотреть, где накосячил и исправляться)
Alexander
если нужны такие комментарии придумай имя метода/функции и оберни в нее
Emil
Справедливо
Alexander
но возможно это очередные ненужные комменты, я посмотрел там выше такие же
byd
так, почему не спим!
Maxim
В общем. Баланс 100, вы делаете селект т.к. пришла транзакция +10, другой процессы в этот момент меняет баланс +20. По завершению первого процесса окажется баланс 110, но должен быть 130.
byd
разработчик должен спать
Maxim
Защитится можно через update balance set sum=sum+{num}, но для таких запросов нужна блокировка и обёртка в tx
Alexander
4. https://github.com/CookieNyanCloud/avito-backend-test/blob/master/internal/delivery/http/v1/finance.go - тоже много в одном файле, ответы притом вынесены
Maxim
Это 1 вариант. Вариант 2. Мутекс по userid, Но это расход памяти.
Alexander
а в целом-то глобально очень нормально. в чем причина - не понимаю. + жирное задание на стажера, по крайней мере реализация жирная
Emil
Как все интересно Все исправлю все учту Спасибо✨✨✨
Maxim
Далее у вас API, хватит использовать 500 код.
👀
+ я конечно разбирать бизнес логику саму прям не стал)
ну так задание читать же невозможно иначе)
👀
зачем тогда писать слово баланс, надо писать пары целых величин.
Maxim
Тут 404 просится, пользователь не найден
Emil
О,м,и правда, не подумал что-то, подходит)
Maxim
https://github.com/CookieNyanCloud/avito-backend-test/blob/master/internal/delivery/http/v1/finance.go#L95
Maxim
Там в задаче написанно использовать коды ошибок. Подберите коды. 500 - ошибка сервера, но не клиента. Тоесть в ошибке виноват сервер
Emil
Да, если пользователя нет, это и правда 404, как-то из головы то вылетели ошибки несерверные
Alexander
блин, я помню как рест делал для мобильного клиента и его как раз делали не мы: "да ты шли просто 400 в случае любой ошибки, просто 400 шли" *facepalm*
👀
а это вообще должно быть запрещено, сервисы уровня приложений не должны вообще использовать транспортные ошибки для сообщения статуса
Maxim
Щас кину
👀
валидный сервис должен возвращать ответ 200 всегда.
Maxim
REST API response codes and error messages - IBM Documentation https://www.ibm.com/docs/en/odm/8.8.1?topic=api-rest-response-codes-error-messages
👀
так клиент может знать, что все отработало, и ошибка уже на уровне логики
👀
rest - полное дерьмо с самого начала, до самого конца
👀
тоже было моДно лет 7 назад
👀
как и rabbit
Alexander
@CookieNyanCloud стой. а там же тесты в задании указаны. где у тебя тесты?
Emil
@CookieNyanCloud стой. а там же тесты в задании указаны. где у тебя тесты?
Вот Это мимо, уже точно моя вина и то, над чем работать, как-то своими тестами был недоволен, решил, лучше без них уж
Alexander
я еще думал, зачем ты интерфейс создаешь, где у тебя только одна имплементация. мокать во время тестов - точно! а потом тесты не посмотрел)
Emil
я еще думал, зачем ты интерфейс создаешь, где у тебя только одна имплементация. мокать во время тестов - точно! а потом тесты не посмотрел)
Моки были, в гитигноре) А тестить надо учиться, да, я вроде и замоковал(?), но на в теории проходимые тесты были ошибки
Emil
Я как-то делал статистику по хх, что нужно в вакансиях по го, самое частое: sql, докер, тесты)
Alexander
Мне кажется, если ты доделаешь все, то можно будет и в резюме прикрепить. Я не понимаю, короче, почему стажёром тебя не взяли. Не верится, что у них там такие монстры, что это на стажёра не катит.
Maxim
PostgreSQL anti-patterns: read-modify-write cycles https://www.2ndquadrant.com/en/blog/postgresql-anti-patterns-read-modify-write-cycles/
Maxim
@CookieNyanCloud
Maxim
Вот про это писал. В остальном вкусовщина, кроме кодов ошибок.
Emil
Какая замеченная беседа *Все, простите за флуд/спам/избыток сообщений, если что*
Alexander
это ближе к теме, чем разговор выше про питонистов и непитонистов
Emil
Можно, спасибо) (А я так страдал с сменой клавиатуры и с отсутствием проверки орфографии [даже на вскод расширение что-то шалит], что аж смешно)
Null
Go. Прорабатываем 25 основных вопросов собеседования https://nuancesprog.ru/p/12333/ @Golang_google
Matvei
Как я помню, нет
Там разве не concurrent mark and sweep?
George
Частично, вроде бы.
Это как? Ну замечал там параллельности. Запускается GC - все рутины ждут.
🔥
Разве gc параллельно работает?
mgc.go // The sweep phase proceeds concurrently with normal program execution. // The heap is swept span-by-span both lazily (when a goroutine needs another span) // and concurrently in a background goroutine (this helps programs that are not CPU bound). // At the end of STW mark termination all spans are marked as "needs sweeping".
Brom
Там же ниже: `// 1. GC performs sweep termination. // // a. Stop the world. This causes all Ps to reach a GC safe-point.`
Anonymous
E
Black
If anyone can make a private script with Golang, let me inbox i will pay
👀
это вопросы для тех, кто хочет устроиться на работу просто писать код в больших объемах, в конвейерную контору - как ни странно этого хочет большинство, потому, что платят, а думать особо не надо - вот они и готовятся
Null
Бесперебойный API на Golang https://nuancesprog.ru/p/13993/ @Golang_google
Ig
За галерные работы видимо
🔥
У меня знакомый пыхер когда первый раз устраивался ему и того больше платили)
Alexander
100м за 450 евров неплохо
👀
Ну вот тут сутки назад как раз обсуждалась похожая вакансия, в авито или где-то в таком духе. Там люди делали тестовое задание, которое было составлено так, что его прочитать до конца не опухнув от безграмотности составителя было невозможно.
Alexander
but for 650 it's good too
Alexander
Хотя в рамках Авито непонятно почему им такое нужно
👀
Ну тут ещё мб суть в том, что ты тз должен уметь сформулировать по требованию того, кто не умеет
Да не похоже, я такие вот задания тестовые писал, лет 15 назад, когда сам ещё ничего не соображал. Почерк идиота, побывав им самостоятельно ни с чем не спутаешь 😂
👀
Хотя в рамках Авито непонятно почему им такое нужно
Просто пофиг. По вертикали спустили - напишите тестовое. Они и написали, а старшие товарищи просто забили. Иерархия.
Tele
Если я использую указатель, подобный этой var config = *ConfigStruct, и считываю конфигурацию из нескольких процедур Go без записи, это безопасно
Null
10 особенностей Go, которые отличают его от других языков. https://dev-gang.ru/article/-osobennostei-go-kotorye-otliczaut-ego-ot-drugih-jazykov-qvbljlayud/ @Golang_google
Rostislav
добрый день, коллеги! Мне бы разработчика на go full time. Есть тут такие?
Rostislav
Может быть go full time?
ой, простите full time))
антон
может ему на webassembly
Rostislav
Ок, дабы не гадать)) У меня приложение построенно на Go сейчас меняем команду и нам нужен go разработчик)
Rostislav
Мобильное приложение.
антон
а зачем менять?