Идеальное тестовое задание для Junior Go Developer
Скидка на все курсы нашей школы loftschool.com/courses-map/?p... по промокоду loftblog-youtube
В ролике мы вживую решаем реальную задачку, которую прислала компания на позицию junior go developer. Пытаемся сделать решение "в лоб", по пути отвлекаясь на теоретическую справку о middleware. Позже, делая акценты на разных деталях мы приводим решение к "идеальному". Такому, которое точно не оставит интервьювера равнодушным, а значит повышает шансы получить оффер.
Ролик будет полезен кандидатам готовящимся к первым собеседованиям на Го.
- уроки по git • Git - для новичков - #...
- сам проект в видео github.com/spatecon/echo-midd...
- тестовое задание в pdf github.com/spatecon/echo-midd...
АВТОР
Илья Павлюков (Ilya Pavlyukov)
i@spate.one
t.me/spatecon
/ ilya-pav
Пікірлер: 148
Отличная подача, смотреть реально в удовольствие. Хотелось бы еще выпусков по Go
Спасибо большое, очень полезно, и у тебя подача материала такая прям приятно и интересно слушать
Прекрасная подача материала, легко и увлекательно, спасибо за ваш труд и ждем новых роликов по гошке.
Отличная подача, внятно, содержательно, в меру кратко. Благодарю!
Спасибо, отличное видео, и приятная подача. За медицинскую компанию - лайк)
Отдельное спасибо за разъяснение того, что такое middleware !
Давай ещё разбор, это очень познавательно ✨
Благодарю за Вашу прекрасную работу! ждем новых роликов)
Очень хорошее и понятное объяснение. Спасибо большое! Делай еще!
Даёшь больше такого контента))))) Прям на пальцах объяснил. Спасибо!
Очень хорошо объясняете легко понят спасибо 🙏🏻 добавьте в проектах транзакции 🙏🏻
просто то, что искал. Огромное спасибо! просто - огонь!
Очень понравился практический кейс и подача материала с последующим рефакторингом (видимо под "чистую архитектуру"), главное нет воды и все уместилось в 40 минут. Очень жду еще в том же стиле!)
Спасибо ! Ждём ещё разборы ))
Очень хорошо рассказываете. Без запинки. Далеко не все так умеют.Даже отбросил метлу и го учить го.
Отличное объяснение, спасибо вам )
очень понятно рассказывает автор, интересно смотреть!
Шикарный материал, ещё бы похожее только с БД объяснение как правильно подключать
Отличное видео. Спасибо большое.
Заметил, что видео длится 40 минут только когда начал читать комментарии. Вообще на одном дыхании
да это действительно так, лайк, буду советовать данный видос)
Это самый лучший разбор кода который я только видел💥 Огромное спасибо что рассказываешь комбинации в ide это правда очень помогает при обучении 🙏🏻
Спасибо за видео, всё круто. Единственное чтобы я поменял, так это 36:10 Вы тут проверяете не просто роль, а конкретно, то что пользователь админ, можно сделать более явное название у метода, но это не критично :)
прекрасная подача материала
Спасибо за урок!!!
Наконец-то узнал как раскидать проект по директориям микросервиса
балдёжно объясняет
Спасибо большое, очень полезно 🍉🍉🍉🍉
чтобы отправлять заголовок из браузера можно поставить расширение типо ModHeader и в путь
Я только начал ради интереса осваивать го. Не стоило ли задать для функции DaysLeft параметр для указания даты, количество дней до которой считаем? Например, func DaysLeft(year int64, month int16, day int16). Или не?)
Я редко пишу комментарии под такими видео, но тут просто не могу пройти мимо не оставивши коммент. Очень круто, что ты разжевываешь, а не бежишь по своему тексту.
"Запрети ! Не запретил. Я упаковал." Смеюсь 🤣
Собеседование в амбреллу, интересно.
Всё классно, только одно но: в задании CONTAINS admin, а не EQUALS admin, т.е. "Super-admin" строка тоже должна проходить :-)
@SeverSiter1
Жыл бұрын
Кстати, хороший поинт!
вообще класс спасибо
Можете объяснить следующий код с минуты 29:40 - почему так надо писать (примерно понимаю, что это связано с концепцией чистого кода, паттернами и т.д), но хотелось бы простым языком получить детальное объяснение
Заржал, когда увидел логотип) "Медицинская компания" Спасибо большое) но хотелось бы задачек на уровень повыше
@hentan4912
4 ай бұрын
Главное чтобы куда-нибудь в Африку в командировку не отправили)
Ещё 20 минут осталось, чтобы тесты написать)
а калькулятор как написать не подскажите саму концепцию написания особенно с римскими цифрами
Я обычно пишу на другом языке, первый раз увидел Go. материал хорошо рассказан. Правда мне не понравилось логика коротких названий s, e и тд а также названием ендопоинта) а так большое спасибо было интересно.
@SeverSiter1
Жыл бұрын
Привет! Спасибо за отзыв😅 Короткие названия для переменных и полей структур это визитная карточка go. Даже исходный код компилятора языка изобилует таким подходом.
@slivabananov4585
Жыл бұрын
@@SeverSiter1 все же это не оправдание
@johnsc4521
Жыл бұрын
У нас в Go буквы платные. На самом деле это такой конвент. Чем ближе реализация, тем короче именование.
@dmitriym4620
6 ай бұрын
Я тоже пишу на другом языке, сейчас посматриваю в сторону Go. И меня аж подбесили эти буквы в полях и методах, это максимально нечитаемо, у нас бы код ревью точно не прошло ;))
@stefano_schmidt
6 ай бұрын
@@dmitriym4620а на каком языке сейчас пишите, и почему решили на Го перейти?
Very good!
Круто, спасибо за видео. Как раз учу го, и код который был написан сначала я бы тоже смог бы написать. Но код после разделения на файлы и раскидывания по разным папкам, использование методов и интерфейсов (итоговый код) вгоняет меня в уныние, тем что я, наверное, никогда, как джун, не напишу такой код. И возникает вопрос: если так должен писать джун, то какие тогда требования к синьорам???
@SeverSiter1
Жыл бұрын
Такие же требования к сеньорам по коду. К ним просто ужесточаются требования обосновать почему они положили код в эти папочки и сделали эти интерфейсы :)
Балдёж!
Он так сочно рассказывает как тот повар из мема который говорит "Еее, бой"
Подскажите пожалуйста профессию и школу для новичков, где меньше "воды" и больше практики❤
Видео крутое. Хотелось бы добавить, что конструкцию ``` if err != nill { return err } return nill ``` можно заменить на простое ``` return err ``` смысл не поменяется.
@trashmylife7832
Жыл бұрын
Очень даже поменяется. Это стандартная обработка ошибок в го. Ретурн без условий всегда будет возвращать
s.g.r.t.y.r.GetDays() это так в озоне нейминг делают?
Класс
Для http-сервера с hello word тащить левый "фреймворк" с гитхаба - ну-ну, отличный вкус ))
подскажите для винды как обновить сервер?
То что в 11-13 минутах рассказываешь, называется обертка (wrap, wrap function, wrapper)
Меня больше всего напрягяет его одежда😂😂😂
Вряд ли такое расположение пакетов в директории internal сделано верно. Я искал проекты с таким же расположением, чтобы убедить себя в обратном, но увы, не нашел. А вот, что говорит ридми-файл на том проекте, который вы взяли за пример: Your actual application code can go in the /internal/app directory (e.g., /internal/app/myapp) and the code shared by those apps in the /internal/pkg directory (e.g., /internal/pkg/myprivlib). Перевод: Фактический код вашего приложения может находиться в каталоге /internal/app (например, /internal/app/myapp), а код, используемый этими приложениями, - в каталоге /internal/pkg (например, /internal/pkg/myprivlib). myapp - это имя вашего приложения: umbrella-test-task. Как я это узнал? В ридми есть другая отсылка: The directory name for each application should match the name of the executable you want to have (e.g., /cmd/myapp). Подытожив, раз ваш главный пакет имеет путь: /cmd/umbrella-test-task То тогда и остальные пакеты должны быть расположены по таким путям: /internal/app/umbrella-test-task /internal/pkg/endpoint /internal/pkg/mw /internal/pkg/service Возможно, вы и получите сочный офер, сделав подобное расположение пакетов и у вас заработает приложение. Но, всегда не лишне будет подумать своей головой, и проверить информацию.
@ipavlyukov
11 ай бұрын
Привет! Спасибо вам большое, очень подробно расписали расположение, со ссылкой на рекомендации (!) go-project-layout. Каюсь, привычка остаётся со мной ещё со времен Ozon'а, и во всех проектах, с которыми мне приходилось и приходится работать часто вижу её воплощение как у меня. Однако, приведённый вами пример мне кажется даже более логичным. Единственное, что я бы не стал в реальном проекте уносить в internal/pkg что-то типо endpoint'ов и сервисного слоя, ибо они прямо реализуют логику приложения. А вот middleware могло бы знатно там уместиться.
@user-by6lf1js6w
11 ай бұрын
@@ipavlyukov А что, если размещать endpoint'ы там же - в internal/pkg, только делать субдиректроии? Когда я писал REST-проект, то мне нужно было уместить по 3 слоя (пакета) для каждого эндпоинта и инициализировать их всех в специальном для этого месте. На данный момент пишу другое "большое" приложение, где поначалу думал, что возможно стоит разделить его на 2 - каждое со своими внутренними пакетами-эндпоинтами. Но, подумав о пакетах в субдиректроиях и едином месте их инициализации, решил оставить монолит. UPD: фигню написал, упустив суть, что вам надо держать эндпоинты открытыми (не находящимися в internal).
@ipavlyukov
11 ай бұрын
@@user-by6lf1js6w Главная мысль здесь, это достичь предсказуемого положения кода для тех, кто работает над проектом.
@user-by6lf1js6w
11 ай бұрын
@@ipavlyukov Это да, безусловно.
А как же swagger, config, graceful shutdown и многое другое?
service - s, app -a и тд, а вы точно сеньор-помидор?)
Спасибо, интересно. Но почему int64? Можно было int32, или даже int16
@toyz_3752
Жыл бұрын
А если дата поменяется и кол-во дней будет большое?
7:57 зачем в функции Handler писать всю эту лишнюю ерунду если можно сделать сразу return ctx.String(...). Если будет ошибка, он вернут ошибку, нет ошибки вернет nil. Но вместо этого мы написали всякую ерунду по типу, если есть ошибка возвращаем ошибку, иначе nil. Что с логикой?
Топ
но в школе не вижу курса по golang
Мммда, есть ощущение, что чистый код прошел мимо данного кода. Кто-то будет говорить, что однобуквенные переменные это ОК для го, но я работаю с го в бигтех компании и это далеко не так
@MaximBondarenko
11 ай бұрын
Как говорится, есть только две сложные задачи - кэширование и нейминг переменных :)
@denisgrbnk4054
11 ай бұрын
@@MaximBondarenko отличная фраза)
@linuxoidovich
5 ай бұрын
@@MaximBondarenkoа чем кеширование сложное?
Скоро будут языки , где каждой функции - отдельный файл. И три тонны импортов в хедере Все к этому идет.
👍 HO на фейс не обязательно переключать кажд 5 мин , главное код
Решил задание, взяли на работу. Когда понял что эта медицинская компания делает-решил уволиться. Теперь за мной гоняется какой-то верзила без глаза в кожаном плаще (затирает про какой-то старс) и какой-то недоариец (так-же в плаще и еще в очках солнцезащитных, хз зачем они ему). Дальше -то что делать?
А зачем мы добавляем endpoint в App? Ну тут, понятно, мы показываем, что умеем. Но вот если представить реальное приложение с несколькими endpoint'ами, то есть ли смысл их вообще определять в структуре App, если мы их используем только в рамках app.New()?
Так, где смотреть твои уроки?
@ipavlyukov
Жыл бұрын
Если есть спрос, то могу разобрать и другие темы. Предлагай их прямо здесь, в комментариях!
@sullamagnus
Жыл бұрын
@@ipavlyukov блин, сегодня к вам в команду не взяли)) Тема голанг в принципе интересна, может задачки на литкоде поразобрать. Ты очень прикольно подаёшь материал. Доступно.
@SavenkoRoman
Жыл бұрын
@@ipavlyukov это понятно, что можешь разобрать другие темы и можно предлагать их в коментах. а смотреть-то где? вроде умный чел, а на вопрос не ответил =)
@ipavlyukov
Жыл бұрын
@@SavenkoRoman привет, друг! Потому что не на что кидать ссылку. Ведение своего блога очень большая работа. Чаще я публикуюсь на вот таких каналах как этот, поэтому следовало бы ожидать тут 💀
@SavenkoRoman
Жыл бұрын
@@ipavlyukov привет! Я пока нашел только 2 ролика твоих. Где другие глянуть?
Меняю профессию, хочу перейти на го, работаю строителем, и вижу у тя та же проблема, никак с люстрой не определишься;)
вопрос: а если бы мы в эндпоинте не описывали интерфейс, а просто передали бы сервис - это уже не был бы депенденси-инжекшион?
@ipavlyukov
Жыл бұрын
Был бы, но ведь нам нужно показать, что мы знаем как применить интерфейс для инъекции зависимости. Не буду лукавить, видео неполное, изначально в планах были еще юнит тесты.
@dvalejo
Жыл бұрын
Я бы еще добавил блокчейн и кубер
Прекрасный симбиот в стиле для чайников с последующей полной жестью!)) Нихрена не понял...
Посоветуйте норм курс по го
всё классно, но по сравнению со Спрингом - весь этот Гоу какая-то боль 😖
похоже на Express JS
Несколько замечаний: 1. Количество дней вычисляется неправильно, отбрасывая дробную часть теряется один день. Правильно перед преобразованием в целое вызвать math.Ceil() на результат деления 2. Однобуквенные переменные выглядят очень нечитаемо, по крайне мере для меня Senior Java разработчика. Неужели в Go так принято? 3. Не хватает тестирования. 4. Не хватает файла .gitignore со строкой .idea/ 5. Название корпорации выдуманное (из фильма Resident Evil), то есть задание придумал автор ролика. Поэтому вопрос: зачем вообще использовать какие либо сторонние библиотеки, когда стандартного net/http из самого Go хватит более чем полностью?
почему даже упоминания нету о тестах?
Подача очень хорошая. Единственное мне не нравится что вы сокращаете название переменных до s вместо того чтобы написать полностью. Если взять из контекста эту функцию и показать кому либо вряд ли человек поймет что там ожидается какой то сервис или что либо еще.
@Antonio-ib6ii
Жыл бұрын
особенно это заметно когда вы вызываете e.s.DaysLeft()
@SeverSiter1
Жыл бұрын
Краткость именования полей - визитная карточка Go. Но, конечно, стоит опираться на стандарты компании в которой вы работаете.
извиняюсь но у меня кажется с самого начала ничего не получается . скачал я все что нужно для GO но visual studio у меня хз как работает и саблайм . в терминале вс я написал го мод инит и у меня пишет ошибка какая та :go : Имя "go" не распознано как имя командлета, функции, файла сценария или выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пути , после чего повторите попытку. и вот после такого уже вообще какой язык учить
@SeverSiter1
Жыл бұрын
Нужно убедиться, что go установлен в систему и может быть вызван из командной строки.
@magnat7045
Жыл бұрын
@@SeverSiter1 как
@SeverSiter1
Жыл бұрын
@@magnat7045 следуя инструкциям с официального сайта
@magnat7045
Жыл бұрын
@@SeverSiter1 C:\Users\user>go install 1.19.4@latest go: 1.19.4@latest: unrecognized import path "1.19.4": https fetch: Get "1.19.4/?go-get=1": dial tcp: lookup 1.19.4: no such host
@SeverSiter1
Жыл бұрын
@@magnat7045 думаю проще с сайта скачать установщик
счас бы назвать spring-like архитектурой "когда есть эндпоинт, сервис, репозиторий" но главное что синьор и работал везде-везде
Если бы я увидел в коде функцию названную "MW", переменные "a, e, s" - закрыл бы и выбросил в корзину.
@user-gp9hu4hh4y
Жыл бұрын
Это нормально для го
@IgorYegorkin
Жыл бұрын
@@user-gp9hu4hh4y это нормально только для обфускаторов и для BASIC в школе 😅
@srr_
Жыл бұрын
this is Go
@kirillbezrodny5107
Жыл бұрын
@@IgorYegorkinпочти все примеры кода на Го в интернете, именно такие
@user-xq2ro2sg5u
Жыл бұрын
Это как если увидеть программиста в рубашке белой .) парень очень круто объясняет , ждём новых видео
А где DI и тесты ?
Всё отлично, но нет тестов
а что дома в пальто?
Смотрю видео и задаюсь одним вопросом - не жарко ли сидеть в свитере и пиджаке в квартире?
Пытаюсь освоить Go сейчас. Если такая реализация соответствует требованиям для джуна, то я пожалуй просто рядом с офисом компании постою, в окна позаглядываю.
@denisbogdanov8976
Жыл бұрын
Что, всё так плохо?
@DarkRavenStyle
Жыл бұрын
@@denisbogdanov8976 Нет, ещё хуже)
Не работайте на Umbrella Corporation! Они не те, за кого себя выдают
нэйминг
Решил закинуть этот код в качестве примера который писал. На что получил ответ от рекрутера:"Присланный код был слабоват с точки зрения архитектуры". Что не понравилось ума не приложу.За видео спасибо!
@miheiheld4458
4 ай бұрын
Потому что логику в handler/controller нормальные разработчики не пишут
Но ведь работы для джунов тем более на Го нету))) Месяц ищу, 60 высланных, 0 результата.
@SeverSiter1
Жыл бұрын
Сейчас вакансий действительно меньше, но это не значит, что ниша исчезла и тем более навсегда. Знакомые джуны за последние недели получали офферы и из Гермпании и из Великобритании.
@alexk3929
Жыл бұрын
@@SeverSiter1 Рад за них. Я пишу лично свой опыт, они наверное сениоры в других языках и с опытом в несколько лет? Просто свитчнулись на го, да? Ну тогда понятно)
@SeverSiter1
Жыл бұрын
@@alexk3929 я лишь к тому, чтобы у тебя не опускались руки. Уверен, ты найдешь лучший оффер 😇
@alexk3929
Жыл бұрын
@@SeverSiter1 уже опустились. Работаю в другой сфере, потому что надо оплачивать счета и жильё. Поищу летом мб рынок стабилизируется
@user-mu6zp2cn3y
Жыл бұрын
@@alexk3929 а если не секрет в какой сфере работаешь?
ужасная несправедливость. почему рассказано как открыть ссылку в браузере на маке и на винде, а как на линукс не сказано?
@erik_james
5 ай бұрын
Тыж на линуксе) Напиши свой бразуер просто
@andreysakharov6210
5 ай бұрын
@@erik_james видимо поэтому и не сказано, что написание браузера не умещается в хронометраж видео))
@erik_james
5 ай бұрын
@@andreysakharov6210 все таки приятно ж быть пользователем линуха) все по умолчанию думают что ты запросто можешь писать свои драйвера на ассемблере, вот лишний раз и не рассказывают как там ссылочки открывать😁😅
Без пальто ты не смог бы написать.
это просто жесть. для кого это? для новичков? они ничего не поймут? те, кто уже что-то могут, копирование документации ничего не даст
боже, что с неймингом дядя?) что за a? что за e? что за s?) код таких джунов дальше первой переменной даже смотреть не будут
Холодно у вас в офисе, судя по одежде
200 не всегда означает, что все успешно, запрос к серверу может быть успешен, а вот результат не всегда
@hiyoutube6769
Жыл бұрын
так 200 это и озночает что запрос к серверу успешен
@miheiheld4458
4 ай бұрын
Если ответ от сервера не успешен то возвращают пятисотые. Всё остальное спокойно используется для результата.
вапще не интересуюсь golang но я посмотрел