Текстовая версия в виде инструкции: slc.tl/ygj4t Полная текстовая версия гайда: habr.com/ru/articles/774796/ Облачный сервер для для gRPC-сервиса: slc.tl/s0kla 👾Мой канал в Telegram: t.me/ntuzov Пишу там новости, анонсы своих активностей и просто интересные мысли Также с его помощью я получаю от вас оперативный фидбэк по роликам - что нравится, что не нравится, какой ролик делать следующим и т.п.
@кожаныйублюдок-э8е Жыл бұрын
Понимание того кто находится перед нами - это идентификация, а аутентификация это уже проверка того что пользователь идентифицирован верно, грубо говоря что Вася это действительно Вася а не Петя которые пытается зайти под пользователем Васей. Так же как в ООП здесь тоже есть свои 3 кита безопасновти - Идентификация, аутентификация и авторизация.
@melomalo168211 ай бұрын
Здравствуйте Николай! В текстовой версии вот тут Команда для генерации будет следующей: неполная команда при копировании!
@Encrouter9 ай бұрын
4:08 Зачем самому изобретать велосипед, когда есть GZip сжатие на лету? Для json у меня соотношение достигало 10:1. Вот убирать _ненужные в данный момент_ данные, либо какие-либо _промежуточные_ данные, _необязательные вообще для пользователя_ стоит.
@ЕвгенийСущевич-б7к Жыл бұрын
Большой длинный многословный комментарий бесконечный благодарности чтобы алгоритмы ютуба вывели ролик в топ
@xBAMIIuPx Жыл бұрын
Спасибо за такой, не побоюсь сказать, титанический труд. Очень мало подобных видео 👍
@СергейТ-т8э Жыл бұрын
Это мне на несколько дней плотных занятий.
@funnyduck63267 ай бұрын
Спасибо огромное, только погружаюсь в Go и выпало ваше видео, с удовольствием посмотрел, действительно огромная польза для комьюнити)
@igor_ni10 ай бұрын
Удивительно ясные и логичные объяснения действий и своего выбора. Смотрел и наслаждался!
@alexandrshatilov82276 ай бұрын
Господи, Николай, это невероятная работа - спасибо вам огромное за полный обзор ВСЕГО. Я из этого видео очень многому научился и узнал разные практики, например с логгированием, архитектурой проекта, и всякие штуки по типу MustRun. Думаю такие мелочи помогли мне пройти тестовое задание! Очень приятно смотреть такое. Не останавливайтесь!
@gigavaxer65578 ай бұрын
Сам PHP разраб. Решил посмотреть под работу видос и не смог работать, потому что смотрел видос) Очень все доходчиво обясняет автор. Спасибо. Посмотрю после работи)
@nikolay_tuzov8 ай бұрын
Ого, очень приятно видеть, что мой ролик настолько затягивает ❤️
@markmakarov4544 Жыл бұрын
Огромное СПАСИБО за такие гайды по гошке! Очень круто раскрываешь тематику.
@invisibleinvisible83 Жыл бұрын
Благодарю за такой труд 🙏🏻🌹🌹🌹 Процветания каналу и всем здоровья 🙏🏻🌹🌹🌹особенно Николаю за такой труд
@research_Development Жыл бұрын
Лайк не глядя)) Что короткие, что длинные ролики - топовые у тебя.
@MarkA123 ай бұрын
чел, хорош. Профессионализм + приятный голос редкость в русскоязычном ютубе!
@djonidep89415 ай бұрын
Автор плиз делай больше таких уроков полезных, чтоб мы простые работяги могли твои уроки брать и учиться собирать сайта с нуля. плиз. Я думаю много ребят поддержат. Мир вашему дому
@eleimt Жыл бұрын
Ролик и автора в ТОП! Огромная благодарность ❤
@sr08887 ай бұрын
Спасибо! Огромная польза для меня, я сейчас перехожу с ноды на гошку
@hardlabor9412 Жыл бұрын
Спасибо спс, только искал видео по gRPC, толкового ничего не нашел, а на собесах спрашивают😊
@kotlinjava5228 Жыл бұрын
ГИГАНТСКОЕ СПАСИБО НИКОЛАЙ!За флаг РК как обычно уважение🇰🇿🦅🔥
@alextotun5 ай бұрын
Отличный ролик, интересная альтернатива CRUDа с подробными пояснениями.) Спасибо! Всех Благ!
@ПавелБачурин-д3к11 ай бұрын
Очень крутой ролик, спасибо большое за знания. Интересно было бы увидеть использование docker в вашем исполнении, так как вы довольно исчерпывающе рассказываете и показываете всякие нюансы.
@nikolay_tuzov11 ай бұрын
Темы для новых роликов теперь можно предлагать здесь: ntuzov.canny.io/golang-lessons/p/scheduler Тогда точно не потеряется, не забудется, и сможем оценить востребованность темы. А чтобы точно сдлеать это правильно, советую сначала прочитать этот пост: t.me/ntuzov/355
@cipplant2800 Жыл бұрын
Весь месяц ждал только это видео❤
@LunsBeats Жыл бұрын
Подобных по содержанию и насыщенности роликов, если и делают в рускоговорящем сегменте, то единицы, однозначно лайк и уважение
@vladpetrov451210 ай бұрын
Продолжай в том же духе! Один из лучших каналов на ютубе про гошечку
@evilLincoln10 ай бұрын
Спасибо! Наверняка есть какие-то неточности, но в целом редкое на Ютубе видео, где разобрана не отдельная деталь, а вся конструкция в целом
Спасибо за видео, ждал его как второе пришествие ♥
@ВиталийВасильев-я9я11 ай бұрын
Братец, это просто огромная работа, большое тебе спасибо за бесплатный контент такого уровня, было очень интересно. Лайк, подписка.
@jordenskraften827311 ай бұрын
Как раз недавно начинал делать свои поделки и осваивать gRPC, спасибо за еще один хороший материал по этой теме
@nrm312211 ай бұрын
Неужели ролики такого крутого уровня можно найти на Ютубе. Спасибо, приятно посмотреть!
@Kannball11 ай бұрын
На роликах данного канала я обычно использую лайки вместо "посмотреть позже". Автор как всегда выдал лютешую базу. Ждём продолжения
@eamarc Жыл бұрын
мне больше нравится для кода в /internal логировать ошибку сразу после получения и передавать оригинал вызывающему коду, а вот для кода в /pkg уже можно и обернуть... Кстати, в показанном подходе определения интерфейса более серьёзный недостаток, это если в сигнатуре метода появляется пользовательский тип - тогда абстракция протекает из-за связи или приходится писать нецензурный кастинг.
@Николай-с5е1з Жыл бұрын
Вот это трудовая мощь, спасибо!
@alexeykashurnikov744210 ай бұрын
Спасибо огромное за такой прекрасный гайд! Если будет возможность в отдельном ролике настроить пайплайн, будет вообще обалденно :)
@sergeywhite8897 Жыл бұрын
Мы ждали и наконец-то дождались
@sergeywhite8897 Жыл бұрын
Тут про gRpc только несколько хендлерочков, очень жду если расскажешь и покажешь(очень ждал), примеры как использовать разные варинаты gRpc на практике. То есть server Stream, client Stream и комбинацию этих подходов. В любом случае, сделал невероятный труд. Красава
@AlexSmith-pd8cn11 ай бұрын
Хотелось бы в ролике увидеть про использование связки gRPC и Kafka
@arxonic Жыл бұрын
спасибо за труд, очень полезная информация ❤
@andreipopov2700 Жыл бұрын
Легендарный автор! Я по его роликам учился) лайк не глядя
@alexispell4251 Жыл бұрын
Коммент в поддержу твоего канала. Спасибо!
@trowy19311 ай бұрын
11:50 Харасмент через жвт токены, кибербулинг выходит на новый уровень
@madbad1310 Жыл бұрын
Давно ждал. Спасибо большое!
@EvgeniyYatsenko25 күн бұрын
Шикарное видео, спасибо!
@Iaxls11 ай бұрын
Топ контент! Лайк и комментарий в поддержку и для продвижения канала!
@timurtimerkhanov933510 ай бұрын
Николай Топовый профессионал!
@nikolay_tuzov10 ай бұрын
Спасибо)
@snamenatel9 ай бұрын
Круто! Да это ж круто!
@utti_12c8 ай бұрын
Спасибо🙏💕 большое дай Бог вам здоровья
@beertooo Жыл бұрын
Спасибо за твой труд, очень полезно!
@hurricane-rus11 ай бұрын
Спасибо - хотим еще таких видео!)
@albakov11 ай бұрын
Это было прекрасно, спасибо! )
@tumenit8 ай бұрын
Спасибо! Очень познавательный видос.
@ВадимБреев9 ай бұрын
Спасибо за видео, крутой материал. Есть вопрос. А в каком месте реализуется регистрация и логин в реальных условиях. Например если это фронт, то чтобы получить токен, можно реализовать запрос через js, или есть более лучшие подходы?
@def-any Жыл бұрын
Лучший!!
@aboronilov10 ай бұрын
Привет. Супер обучалки. Подписался. У тебя есть контент где ты учишь делать микросервисы? Желательно с тестированием и логгированием😊
@Iaxls11 ай бұрын
Николай, подскажите - в следующем видео про permissions какой паттерн планируете использовать? ABAC или RBAC? Очень надеюсь и хотелось бы увидеть реализацию именно ABAC, в силу наибольшей гибкости. К слову приходилось реализовывать ABAC на nodejs, но очень интересно посмотреть на все это дело на go.
@denis7442 Жыл бұрын
Автолайк Коляну, топовый контент, красава!
@xJusper Жыл бұрын
Спасибо за ролик
@nika31169 Жыл бұрын
Жду такой же видос, только по брокерам
@unicoxr5tj417 Жыл бұрын
ой, за взрослое всегда лайк
@ДиасМуратов-в2ы9 ай бұрын
за флаг отдельный лайк ❤
@zayets19879 ай бұрын
Спасибо за труд, в IDE jetbrain нужно задавать env не используя скобок “ ” - CONFIG_PATH=config/local.yaml , нужно задавть в меню File -> Settigs ->GO-> Go modules CONFIG_PATH=config/local.yaml !!!!! Вопрос почему здесь панику используешь в конфиге, а в рест API фатал пишешь?
@zayets19879 ай бұрын
@atipuginhere11 ай бұрын
Мощно, крутяк :)
@ИванКозлов-ь8ъ11 ай бұрын
Доброго дня. Вцелом крутой ролик. Но есть вещь, которая прям тригерит "Нельзя передавать роль is_admin в токене, если захотим лишить человека прав, а токен 1 час живёт, то не лишим". Ну в рамках такого пет-проекта - может и да. А Если у тебя KeyCloack + Kong ? И лишим и довольно быстро, и без проблем. Logout ему сделаем и всё. Как например браузер будет определять is_admin? Кроме как по токену? Делать ему целую ручку для этого - ну вот тебе и нагрузка на сервер. Ну или если ролевая модель сложнее чем Админ, не Админ. Вобщем стоило сказать что описанные проблемы они касаются только текущей реализации пета-демки.
@vladislavstepanov75919 ай бұрын
Описанная проблема относится в целом к jwt. Мы также и не можем сразу разлогинить человека, максимум что можно сделать - это запретить обновлять токен, чтобы токен человека не смог обновиться, но опять таки у человека все еще будет доступ все время пока живет текущий токен. Решение для этого простое - либо уменьшаем время жизни аксесс токена до маленьких значений(например 5 минут) либо старые добрые сессии)
@vladimir_-_10 ай бұрын
Николай Тузов, спасибо вам за контент. Я сам самоучка , работаю как веб-разработчик начинал с курсов и фронта, сейчас посматриваю в сторону бэка, php честно не хочется углубляться хотя каждый день с ним сталкиваюсь. Николай Тузов хотел спросить на площадках много старых курсов по go, есть ли разница от версий с какой можно начать или как js просто обрастает новыми фичками ?
@nikolay_tuzov10 ай бұрын
Большой разницы нет. Можно изучить курсы / книги по старым версиям, а потом ознакомиться с нововведениями. Но если есть возможность, лучше выбирать актуальный материал.
@vladimir_-_10 ай бұрын
@@nikolay_tuzov спасибо за ответ, будем вливаться в Go
@ПавелВеткин-о6щ3 ай бұрын
8:23 - Идентификация, аутентификация и авторизация - это три ключевых процесса, которые обеспечивают безопасность и контроль доступа в информационных системах. Они часто используются вместе, но выполняют разные функции. ### Идентификация Идентификация - это процесс, в ходе которого система определяет, кто пытается получить доступ. Это может быть логин, адрес электронной почты, номер телефона или другой уникальный идентификатор, который однозначно указывает на конкретного пользователя в системе[1][3][5]. ### Аутентификация Аутентификация - это процесс проверки подлинности пользователя. После того как пользователь идентифицирован, система должна убедиться, что он действительно тот, за кого себя выдает. Это обычно делается путем ввода пароля, PIN-кода, биометрических данных (отпечаток пальца, распознавание лица) или с использованием двухфакторной аутентификации, которая включает в себя дополнительные уровни проверки, такие как отправка кода на мобильный телефон[1][2][5]. ### Авторизация Авторизация - это процесс предоставления пользователю прав на выполнение определенных действий или доступ к определенным ресурсам после успешной аутентификации. Например, после входа в систему пользователь может получить доступ к своим файлам, настройкам или другим ресурсам, на которые у него есть права[1][3][5]. ### Взаимосвязь процессов Эти три процесса обычно выполняются последовательно: 1. **Идентификация** - система узнает, кто пытается войти. 2. **Аутентификация** - система проверяет, что пользователь является тем, за кого себя выдает. 3. **Авторизация** - система определяет, к каким ресурсам и действиям пользователь имеет доступ. Без аутентификации идентификация не имеет смысла, так как любой может ввести существующий логин. Аналогично, без авторизации пользователь не сможет выполнять действия, даже если он успешно идентифицирован и аутентифицирован[2][3]. Citations: [1] www.kaspersky.ru/blog/identification-authentication-authorization-difference/29123/ [2] skillbox.ru/media/code/identifikatsiya-autentifikatsiya-avtorizatsiya-chem-oni-razlichayutsya/ [3] new-tel.net/blog/identifikatsiya-autentifikatsiya-avtorizatsiya-razbiraemsya-v-terminologii/ [4] habr.com/ru/articles/720842/ [5] safe-surf.ru/users-of/article/643444/
@phplego9 ай бұрын
А почему все методы сервисного слоя принимают Context, но нет самой проверки на предмет отмены этого контекста? Какой в нем тогда смысл? Спасибо.
@adelrus113427 күн бұрын
Спасибо за видео, очень интересный ролик. Я правильно понимаю, что на работе в основном будут просить делать эти gRPC сервисы?
@nikolay_tuzov27 күн бұрын
Зависит от работы. Где-то вместо него может быть REST API (у меня по нему тоже ролик есть). И это если ты вообще вебом планируешь заниматься, он тоже не везде.
@adelrus113427 күн бұрын
@@nikolay_tuzov Понятно, спасибо за ответ. Я REST API уже смотрел, но gRPC выглядит труднее
@fr11nikaka633 ай бұрын
Вопрос на 1:53:42. Вызывая errors.Is(err, storage.ErrUserNotFound) мы по ведь повышаем связанность с этим пакетом хотя работаем с usrProvider. Было бы лучше вынести сущность в domain/user/models.go,error.go и тут уже хранить ошибки по работает с этой абстракцией ? Или же это оверхед?
@Almas-200211 ай бұрын
За флаг Казахстана отдельное спасибо 🇰🇿😊
@xjoel00658 ай бұрын
Несколько вопросов Если запускать миграции в самом приложении после инициализации базы? без отдельного мигратора. это ок? например пакетом goose? Нужен ли такой сложный github actions конфиг связанный с systemd, не проще ли создать пакет и с помощью docker Watchtower ждать изменений в образе что хранится в пакетах на гитхаб?
@protomem0709 Жыл бұрын
Круто
@Евгений-у5й7я8 ай бұрын
Благодарю автора за годный материал - это во первых. А во-вторых хотел спросить/предложить: Нормально ли, чтобы не передавать три раза storage в функцию, объявить интерфейс Service и встроить в него все те три интерфейса, образец: type Service interface { package.UrlSaver package.AppProvider package.UserProvider } И потом передавать его одного в функцию-конструктор New(log *slog.Logger, port int, tokenTtl time.Duration, service package.Service) ?
@madbad131011 ай бұрын
Может прикольней было бы не встраивать все интерфейсы Storage в сервис Auth по одному, а определить общий интерфейс, который бы объединял все мелкие интерфейсы. И в случае рефакторинга не составило бы труда отделить конкретный интерфейс, выпилив его из общего.
@dokinaKA11 ай бұрын
если вдруг, у Вас возник затык с установкой protoc, и вроде все рекомендации и документации прочтены, а команда protoc --version ругается - просто добавьте в переменную среды в Path путь к файлу protoc-25.1-win64\bin
@MrBoBrilO Жыл бұрын
Ещё бы деплой на gitlab ci/cd был и была бы совсем абсолютная вкуснятина, но и так очень круто, благодарю!
@nikolay_tuzov Жыл бұрын
А зачем gitlab, если есть github? Для пет-проектов идеально, а на работе этим девопсы занимаются обычно.
@worus27611 ай бұрын
Столкнулся с такой проблемой: при написании TestLogin_FailCases, тест выдавал ошибку на строчке require.Contains(t, err.Error(), tt.expectedErr), смотрю в логах, а там проверяется наличие "invalid email or password" (1) в "invalid argument" (2). Проблему решил, заменив текст ошибки в grpc хендлере с (2) на (1). Вопрос, не стоит ли как - то стандартизировать внутри сервиса название подобных ошибок? P.S. ролик очень крутой, автору большое спасибо за проделанную работу!
@vp_arth8 ай бұрын
Несколько минут описываешь I из SOLID, не упоминая сам SOLID. Можно же просто сказать «вот, есть такой принцип, используйте его». Собственно, все эти паттерны и наборы принципов существуют для упрощения коммуникаций.
@alex-web75534 ай бұрын
Очень большое спасибо! Единственное, не понял как реализовать мидлвар для авторизации из стать. Помогите пожалуйста. очень надо!
@sd3veng33811 ай бұрын
Будет ли видео по прекрутке фронта к сервису авторизации?
@Carimusa Жыл бұрын
Логером удобно логировать имя файла и строку из которой собственно лог.
@nikolay_tuzov Жыл бұрын
А если вы обновите код и строчки немного сдвинутся? И при этом вам потребуется посмотреть вчерашние логи, когда версия кода была другая? А если позавчерашние, когда версия кода была ещё более старая? Можно, конечно, ещё и версию кода логировать, но это слишком уж запарно - разбираться к какой версии что относится, и что было в этой строчке в такой-то версии.
@Carimusa11 ай бұрын
Файл и строка берется не в месте логирования. В Го можно получить стек вызовов через runtime / Caller, логгер это может сделать сам. По поводу изменений версий: у нас с этим за много лет проблем не было ) Более того, если багрепортер указал в репорте версию и номер строки из лога не соответствует коду этой версии, то это сразу указывает, что багрепортер где-то ошибся )
@nikolay_tuzov11 ай бұрын
@@Carimusa не очень понял, что значит "берется не в месте логирования", и как это связано с тем что я написал? Использование runtime / Caller довольно затратная и не быстрая штука, не во всех случаях подойдет. Багрепортер, это отдельная история вообще. Я больше про то, чтобы удобно было в логах разбираться, и чётко понимать, к какой функции относится та или иная запись.
@Carimusa11 ай бұрын
@@nikolay_tuzov Согласен, затратно и не быстро, но на практике, по умолчанию, на продакшене логируются ошибки и немного информационных сообщений. Если собирается дебаг логи, то затраты на io оказываются значительно больше, чем все остальное. По поводу смещения номера строки, то это больше специфика нашего проекта. У нас не бывает логов, без привязки к версии продукта.
@xlzpm972210 ай бұрын
Здравствуйте, Николай, вы в ролике упомянули gtpr или как то так произнесли это сокращение, но в инете совсем нет ничего про это, можете написать , как по правильному
@nikolay_tuzov10 ай бұрын
General Data Protection Regulation (EU GDPR) - регламент по защите данных в ЕС
@Николай-с5е1з8 ай бұрын
Подскажите, пожалуйста, верно ли, что protobuf преобразует ключи как запросов к сервису, так и ответов? И клиент на своей стороне декодирует ответ от сервиса с помощью контракта
@mralexxp32786 күн бұрын
Видео, конечно, хорошее, но сам формат таких видео - роняет самооценку разработчиков, особенно начинающих. Многие всерьез воспринимают, будто ты все это пишешь из головы и будто это нормально, что человек так быстро пишет код. Склейки еле заметные, но тупняки на видео обязательно должны быть. И вторая вытекающая проблема - попытка сжать хронометраж видео настолько давит на тебя, что постоянно приходится ставить видео на паузу каждые 3 секунды, так как код ты набираешь вне видео, потому, ты вроде начал что-то объяснять, и пока переписываешь и вдумываешься в код - ты перескакиваешь уже на совершенно другой код. Наверное, лучше было несколько видео в формате плейлиста по написанию сервиса с видео по 20 минут, чем попытка совершить что-то сложно за 3 часа подряд. Ну и третье, что вытекает из первого: ты спешишь все уместить в хронометраж и из разряда "объясню чуть позже" перетекает в разряд того самого препода в шараге, который че-то пишет, а мы тупо переписываем и не совсем понимаем. Получился такой гайд, будто написанный для тех, кто уже знает все это (только зачем тогда ему смотреть?). В общем, ковыряю Го уже год, наверное, в свободное время (сам сисадмин). Принцип gRPC понимаю и даже сам писал небольшие реализации, но под такой темп отстрела кода - все с головы улетает, равно как и изначальное понимание. И, кстати, ни один блоггер еще не удосужился писать какой-то код вместе со зрителями, чтобы зрители понимали, что код пишется долго, а еще дольше продумывается архитектура и дизайн приложения, и никто не показывает как совершает ошибки при написании, где упирается в архитектуру, стирает написанное и начинает переделывать архитектуру. Таких ультимативных гайдов никто не сделал, кроме какого-то бородатого деда с 400+ стримами по 4+ часа, как он в реальном времени изучает Go.\
@nikolay_tuzov6 күн бұрын
Спасибо за подробный фидбэк, я учту всё это на будущее. Можем обсудить тут: t.me/ntuzov/530
@artyomecheistov8 ай бұрын
Для чего мы используем Prepare в данном примере, можете объяснить?
@aleksandrsavvinov476811 ай бұрын
тупа царь
@dimmodddimmodd7199 Жыл бұрын
Thanks
@Виталя-п3п11 ай бұрын
А есть ли варианты для бесплатного деплоя, и какой лучше?
@nomionz415011 ай бұрын
Николай, мне очень понравился ваш гайд и вдохновившись решил привнести свой вклад и облечгить людям установку grpc-go плагина и protoc. Я заметил что мой комментарий с ссылкой на репо был сразу удален :( Почему я не могу поделиться решением, которое в разы упращает процесс установки?
@nikolay_tuzov11 ай бұрын
Я не удалял, возможно ютуб автоматом блокирует такое, но это странно. Попробуй ещё раз.
@nomionz415011 ай бұрын
@@nikolay_tuzov в таком случае извините, не берите на свой счет :) Я погуглил и вы правы, youtube действительно автоматически удаляет комментарии с ссылками.
@Евгений-у5й7я4 ай бұрын
Не раскрыта тема как работает Login на клиенте. А это самая нужная часть, на мой взгляд, а то сервис пишем для авторизации, а сам процесс авторизации ускользнул. Откуда AppID берется? как передаётся? С секретом вообще ничего не понятно откуда куда, как потом его сверять на клиенте? А так все здорово.
@nikolay_tuzov4 ай бұрын
Приходи к нам в Gopher Club с этими вопросами, разберемся. Я был ограничен форматом, который и так очень сильно растянулся. И главной целью было - рассказать про gRPC
@artyomecheistov8 ай бұрын
Почему services знает о storage(импортируем ошибки из него)?
@Max-g1c11 ай бұрын
2:30:44 на 65 строке нет ли риска sql иньекции? Пришел с другого яп и там это через orm защищено от подобных моментов.
@nikolay_tuzov11 ай бұрын
Нет, т.к. мы используем метод db.Prepare(). Значения будут экранированы.
@alexkozadaev91110 ай бұрын
Спасибо! Ну гайд скорее исчерпывающий, а не ультимативный. 🤔
@vp_arth8 ай бұрын
Ручку на добавление аппки... А авторизовывать эту ручку кто будет? Этот же сервис? =)
@eternalcringe Жыл бұрын
посмотрел два раза, пока ничего не понятно, сейчас начну заново
@nikolay_tuzov Жыл бұрын
Ты в закрытом канале смотрел? )
@IgorMakarov-n9r9 ай бұрын
Эпизод: пишем функциональные тесты
@НикитаКуликов-ч4с Жыл бұрын
44:51 не избыточно называть структуру GRPCConfig, при условии что она находится в пакете config?
@nikolay_tuzov Жыл бұрын
Возможно, да
@vp_arth8 ай бұрын
А где ошибка «Вы ввели пароль пользователя X, проверьте правильность введённого email»? :)
@Eric_Cartman35710 ай бұрын
Реально ли стать джуном на Golang без опыта или нужно начать с другого языка?
@nikolay_tuzov10 ай бұрын
Я думаю, вполне реально. Но лучше не верить мне на слово, а проверять эту инфу более тщательно - изучить вакансии, поспрашивать в чатах. Вообще, я знаю пару примеров ребят, которые начали именно с Го, и у которых всё получилось.
@ЖЕСТКИЙСМАИЛ-й6м11 ай бұрын
Подскажите пожалуйста, как импортировать пакет log/slog
@ДенисАрсланов-я4р11 ай бұрын
С версии 1.21 он включен в стандартную библиотеку, если его нет просто обнови go.
@artyomecheistov8 ай бұрын
Почему logger в internal а не pkg?
@madbad1310 Жыл бұрын
Совет. Не ставьте утилиту proto через apt install - может установиться старая версия, и тогда будут проблемы. Ставьте через вариант Install pre-compiled binaries.
@buginsystem8925 Жыл бұрын
А не подскажите, что за текстовый редактор используется на 33:00 ?
@nikolay_tuzov Жыл бұрын
Это не редактор, это просто скриншот ) А изначально текст был написан в Obsidian
@buginsystem8925 Жыл бұрын
@@nikolay_tuzov понял. А что за просмотрщик картинок, в котором открыт скриншот?
@nikolay_tuzov Жыл бұрын
@@buginsystem8925 это окошко самого же скриншотера - Shottr. Хорошая штука)