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
Как все интересно
Все исправлю все учту
Спасибо✨✨✨
Alexander
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 стой. а там же тесты в задании указаны. где у тебя тесты?
Alexander
я еще думал, зачем ты интерфейс создаешь, где у тебя только одна имплементация. мокать во время тестов - точно! а потом тесты не посмотрел)
Emil
Emil
Я как-то делал статистику по хх, что нужно в вакансиях по го, самое частое: sql, докер, тесты)
Alexander
Мне кажется, если ты доделаешь все, то можно будет и в резюме прикрепить. Я не понимаю, короче, почему стажёром тебя не взяли. Не верится, что у них там такие монстры, что это на стажёра не катит.
Emil
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
Emil
Какая замеченная беседа
*Все, простите за флуд/спам/избыток сообщений, если что*
Alexander
это ближе к теме, чем разговор выше про питонистов и непитонистов
Emil
Можно, спасибо)
(А я так страдал с сменой клавиатуры и с отсутствием проверки орфографии [даже на вскод расширение что-то шалит], что аж смешно)
Null
Go. Прорабатываем 25 основных вопросов собеседования
https://nuancesprog.ru/p/12333/
@Golang_google
Brom
Alisher
Zver
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.`
Alexander
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
Alexander
Хотя в рамках Авито непонятно почему им такое нужно
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. Есть тут такие?
Vitaliy
антон
может ему на webassembly
Vitaliy
Rostislav
Ок, дабы не гадать)) У меня приложение построенно на Go сейчас меняем команду и нам нужен go разработчик)
Rostislav
Мобильное приложение.
антон
а зачем менять?