Критически редко пишу комменты, но затрагиваешь такие НЕРЕАЛЬНО нужные темы и с таким НЕРЕАЛЬЛЬНЫМ донесением инфы, что не отписать СПАСИБО было бы худшим из грехов, низкий поклон! П.С. видос стопнул на 9 секунде чтобы написать коммент :)
Спасибо за ролик, очень рад был обнаружить как раз перед хакатоном на Go без литературного языка прям хорошо пошло, а то эти гейтвеи, репозитории, инварианты...)
@@olezhek28go У меня один вопрос только появился только что. Верно ли понимаю, что структуры одного уровня не должны использоваться друг другом? Иначе появляется риск зацикленности.
хотел бы внести некоторое уточнение в предоставленный материал инверсия управления (inversion of control) != инверсия зависимостей (30:05) автор рассказывает непосредственно про инверсию зависимостей инверсия управления в свою очередь состоит в том, что мы отдаем выполнение некоторой работы другому инструменту на примере DI можно сформулировать так - мы не пишем код, который будет создавать новые инстансы наших сервисов, а за нас это сделает некоторый фреймворк, который самостоятельно просканирует все директории, найдет необходимые реализации, построит граф зависимостей и начнет самостоятельно создавать инстансы в необходимом порядке на основе графа в видео автор демонстрирует DI, но данный DI был реализован самим автором, без инверсии управления
Необязательно фреймворк. Автор разработал специальный сервис, который будет расставлять эти зависимости, ака "внешний фреймворк", так что у автора все по теме
@@Prof-Shor инверсия зависимостей - принцип SOLID о том, что нужно зависеть от абстракций а не реализаций. Инъекция зависимостей - внедрение зависимостей. Просто это 2 разных понятия, хотя в данном примере оба могут иметь место
@bulat9056 Да ты прав, тут я ошибся. Только автор рассказывает и об инверсии зависимостей, что в объявлении переменных зависимостей будут использованы интерфейсы, так что он ничего не забыл. На 30:42
Спасибо за видео. Блин, из-за того что в go нет возможности перечислять, какие интерфейсы должна имплементировать структура, как это сделано в других языках, приходятся делать такой костыль с переменной, то что структура удовлетворяет интерфейс -- это кек))))
Если у вас в микросервисе под 10 юзкейсов и реп и вам нужна DI-система, скорее всего у вас что-то не так пошло на этапе планирования микросервисной архитектуры)
Согласен:) скорее это бывает промежуточным состоянием, при котором принимаем решение распиливать:) а di лично мне на любых размерах кажется кайфовой штукой
Ток интерфейсы лучше в месте использования объявлять. Т.е. используешь в сервисе интерфейс репо, там его и объявляешь, указываешь какие методы твоему сервису нужны. Иначе, если одному сервису нужны одни методы, а другому другие, и оба могут работать с одним и тем же репозиторием, то они будут эмбеддить интерфейс репозитория со ВСЕМИ его методами, а это избыточность и неудобство для программиста.
56:55 А если у нас не к одной БД репозитории? Или одна репа к постгре, а другая вообще к S3 storage? Как в данном случае обеспечивать атомарность? Интересно было бы про это посмотреть. Это уже больше в сторону eventual consistency
@@olezhek28go Нет. Допустим в нашем сервисе один репозиторий для хранения метаинформации и связей для картинок. Он к постгре. Второй репозиторий это S3 хранилище. Я исхожу из того что под репозиторием подразумевается любое хранилище - SQL, NoSQL, и т.д. Третий репозиторий это например отдельная БД. Там какая-нибудь статистика. И вот есть бизнес сценарии, когда мы должны консистентно положить или изменить объекты сразу в трех местах. Предположим это такой монолит у нас, или сервис (не микро :) ). Какой подход бы использовал в такой ситуации? МОжет будет идея для видео.
2:37. Использование директории pkg. Если речь о сервисе, то о каком переиспользовании кода говорится? Это получается у одного сервиса зависимость от другого сервиса? Звучит странно. Мб в го так принято, но обычно для переиспользования кода используют библиотеки. Были ли на практике такие примеры, чтобы код из pkg одного сервиса использовался в другом сервисе?
Как раз тут и случается срач по поводу интерфейсов:) Кто-то кладет по месту использования, кто-то иначе) так что стоит отталкиваться от того как договорились в комманде
@@olezhek28go так на выходе получаем какой-то конкретный объект, зачем нам возвращать абстракцию? чтобы использоваться полиморфизм, на вход мы получаем абстракцию, а на выходе зачем она непонятно
@@olezhek28goпроблема в том что это не конструктор сущности должен решать какие методы нужно реализовывать возвращать интерфейсом, а тот кто будет пользоваться должен определить нужный ему интерфейс для этой сущности. Конструктор возвращает конкретное(структура), потребители решают какие методы требуются (интерфейс)
Посмотрел разные видосы по чистой архитектуре, единого стандарта тупо нет, каждый городит по своему "как удобнее или как понял" У кого-то Entity,Usecase у кого-то Model, Repository. Давайте еще какой-нибудь "Template" еще введем, чтоб всем дружно гадать, что это такое
Спасибо, очень понравилось. У меня возник такой вопрос, в чём состоит основное отличие чистой архитектуры от Слоистой архитектуры "Layered architecture" (N-layer). Например, почему представленный пример является чистой архитектурой, а не слоистой (N-layer), так как у меня возникла мысль (возможно неверная, прошу поправить, если это не так), что представленный пример можно было бы отнести к Слоистой архитектуре (N-layer).
@@olezhek28go да трудно сказать, надо попробовать апиху полноценную выкатить, не хватает времени пока. У нас еще авторизация, орм, зависимостей внедрения свои способы. В fastapi уже есть это готовое, на коллектив можно опереться. А так со слоями нормально объяснили в видео -- делать их изолированными полностью, и все ок будет.
Олег, отличный контент! Спасибо тебе! Небольшой вопрос: в коде модель репозитория и модель сервиса для User помещены в пакет model. Обе модели с публичной видимостью. В итоге к ним обеим можно обратиться как model.User, но при этом это разные структуры естественно. Возникает некоторая потенциальная путаница и необходимость пользоваться альясами. Это так и задумано? Или в конкретном случае лучше использовать разный нейминг/пакеты? Спасибо!
Спасибо за добрые слова) касательно вопроса - Мы на работе так и юзаем с алиасом) IDE сразу запоминает куда что ведет и импорты автоматом добавляются и путаницы фактически нет) но можно и разные нейминги попробовать)
на больших бачах конвертер дорого юзать (ещё один проход O(n)), также спорно использовать конвертер на перекладывании одинаковых полей из одной структуры в другую. я лично предпочитаю сквозные дто/модели на микросервис. прикол что ЧА разрабилась для модульных монолитов
А зачем лочить запись/чтение на уровне репозитория? Обычно сервис работает в сильно больше, чем одном инстансе и мьютекс тут не сильно поможет) Имхо, я бы решал эту проблему через оптимистические блокировки
всё так, но ролик всё-таки не про распределенные системы, а про архитектуру проекта, поэтому репо слой тут обозначен в упрощенном виде, словно весь трафик льется на один инстанс)
Привет, спасибо за контент, а стоит проходить курс, если в route256 обучался, в том числе у тебя)? И второй вопрос, на разборе будут показаны куски кода, как было бы правильнее реализовать или дана ссылка на реализацию от преподавателя текущего дз?)
Привет) 1) Если в руте на потоке где я обучал был, то наверное нового будет процентов 40. В целом по программе на сайте можешь оценить) 2) Я буду рассказывать темы, иллюстрируя примерами кода, которые будут доступны обучающимся. Что касается дз, то у меня тоже есть моя реализация, да
да я рассказывал из своей рабочей практики) а так-то конечно можно намутить будет как-нить урок веселья ради и по тому же DDD) Заодно будет повод лучше разобраться хех
Вопросы все задают вроде как все с опытом, но смотря как чувак распинается объясняя всем что он сделал все на интерфейсах, типа ООП, то понимаешь что многие вообще не знают что такое ООП, и инкапуляция в том числе. Хотя Go он вообщето задуман как функциональный язык, и че городить ООП, я пока не догнал, за исключением "+" для поддержки проекта. А закзчику тяжело с сайтом и сервером... дааа ерунда.
Прикольно конечно, но я в ахуе с этих названий переменных: r, n, a, b, s. Для реального проекта это конечно будет тот еще пиздец, особенно когда новенькие придут и будут в этом разбираться
@@olezhek28go Ну это в любом случае может ввести в некоторое заблуждение или недоумение неподготовленного человека, ничего не мешает написать название чуть подлиннее, зато любой человек поймет что к чему, да и легче потом в коде будет искать их использование
Все курсы и тренинги - вчерашний день, лохотрон) вы там получите как минимум устаревшую информацию) не рекламируйте это.. имейте совесть) в разы эффективней найти себе ментора) и дешевле и полезней
Почему я не могу рекламировать свой собственный курс, материал которого я обновляю) да и разговоры про знания, которые не используются тоже спорный) практики, которые я там рассказываю мы активно юзаем у себя в команде в Авито) ментор тоже хороший способ, спору нет
@@olezhek28go Если вы передаете свой опыт, знания и являетесь ментором для каждого ученика индивидуально - респект вам и уважуха.. если же нет - то те же пожелания наоборот вам.. и геморрой хронический в качестве бонуса)
Большинство коммерческих курсов - да. Но есть бесплатные курсы от компаний, в которых бывает полезно. Проходил такой от МТС пару лет назад, для меня это был легкий способ войти в Go, имея опыт в другом языке. Доступная информация, классные менторы. Практические задания для меня были мотивацией потратить время на изучение языка на практике. После курса получил 3 оффера из бигтехов РФ, в одном из которых работаю до сих пор.
Олег, спасибо! ИМХО - самый полезный и доходчивый ролик про архитектуру:
Без лишних понтов, из цикла "мне не шашечки, мне ехать" 🙂 Удачи вам!
Большое спасибо за добрые слова:)))
Очень доходчиво, спасибо! Аж захотелось поблагодарить в комментарии :) Вещи, которые в принципе знал, услышал в более понятной форме и лучше усвоил.
Здорово, что мне удалось понятно обьяснить)
Как же классно вас смотреть, все четко, по делу, без душноты)
Спасибо, приятно слышать:)
Критически редко пишу комменты, но затрагиваешь такие НЕРЕАЛЬНО нужные темы и с таким НЕРЕАЛЬЛЬНЫМ донесением инфы, что не отписать СПАСИБО было бы худшим из грехов, низкий поклон! П.С. видос стопнул на 9 секунде чтобы написать коммент :)
Спасибо, рад что видео полезно:)
такой материал в живой подаче очень приятно смотреть) спасибо! Сейчас прохожу отбор в Авито на стажировку, надеюсь там вас увидеть :)
спасибо за добрые слова) удачи в отборе!)
Спасибо за ролик, очень рад был обнаружить как раз перед хакатоном на Go
без литературного языка прям хорошо пошло, а то эти гейтвеи, репозитории, инварианты...)
Отлично!) удачи на хакатоне)
Огромное спасибо, очень познавательно и интересно ❤
Рад, что понравилось))
Пишу на C#, все выглядит похоже и знакомо. Правда, реализация интерфейсов в C# нравится мне больше.
Я тоже было время на шарпе чутка писал:) а что именно в интерфейсах нравится больше?
😁 Олег, респект! Отличный контент.
Спасибо большое)
спасибо, открыл твой канал для себя недавно, кароч кайф контент, побольше вот этого вот!
Классный видос, все понятно даже начинающему
Отличный урок, спасибо. То, что искал.
Рад, что понравилось:)
@@olezhek28go У меня один вопрос только появился только что.
Верно ли понимаю, что структуры одного уровня не должны использоваться друг другом? Иначе появляется риск зацикленности.
какой веселый чел, и презентации забавные делает) Повезло сохранить оптимизм )
Спасибо за добрые слова:)
Олег молодец! Очень красноречив. Приятно слушать )
Спасибо:)))
Спасибо за видео! Будучи джуниором уже пишу такой код :D *довольно понятно объясняете*
Отлично) Рад, что доступно изложил
хотел бы внести некоторое уточнение в предоставленный материал
инверсия управления (inversion of control) != инверсия зависимостей (30:05)
автор рассказывает непосредственно про инверсию зависимостей
инверсия управления в свою очередь состоит в том, что мы отдаем выполнение некоторой работы другому инструменту
на примере DI можно сформулировать так - мы не пишем код, который будет создавать новые инстансы наших сервисов, а за нас это сделает некоторый фреймворк, который самостоятельно просканирует все директории, найдет необходимые реализации, построит граф зависимостей и начнет самостоятельно создавать инстансы в необходимом порядке на основе графа
в видео автор демонстрирует DI, но данный DI был реализован самим автором, без инверсии управления
Необязательно фреймворк. Автор разработал специальный сервис, который будет расставлять эти зависимости, ака "внешний фреймворк", так что у автора все по теме
А точно автор про инверсию зависимостей рассказывает? Мб тут инъекция зависимостей скорее
@@bulat9056
Ну так это 2 стороны одной монеты, автор показывает инъекцию зависимостей(DI), которая и обеспечивает инверсию управления(IOC).
@@Prof-Shor инверсия зависимостей - принцип SOLID о том, что нужно зависеть от абстракций а не реализаций. Инъекция зависимостей - внедрение зависимостей. Просто это 2 разных понятия, хотя в данном примере оба могут иметь место
@bulat9056
Да ты прав, тут я ошибся. Только автор рассказывает и об инверсии зависимостей, что в объявлении переменных зависимостей будут использованы интерфейсы, так что он ничего не забыл. На 30:42
Огонь, спасибо большое за полезную информацию!
рад, что понравилось)
Спасибо за труд!
Рад стараться:)
заметил на 51:17 что все функции имеют в качестве параметра context , для чего это делается , если он не используется
Это скорее привычка:) Просто репо слой то с базой обычно связан, а там контекст нужен) здесь просто для упрощения базу не стал затаскивать)
спасибо, вчера классно уснул в наушниках, придется пересматривать. Помню что повествование веселое, местами с шутечками, чувствуется что чел могёт ))
Спасибо за добрые слова:)
Ахахаха
Спасибо за видео. Блин, из-за того что в go нет возможности перечислять, какие интерфейсы должна имплементировать структура, как это сделано в других языках, приходятся делать такой костыль с переменной, то что структура удовлетворяет интерфейс -- это кек))))
Да это скорее удобство чтения добавляет) так-то можно и не писать такую конструкцию, просто ошибка на компиляции будет, а не сразу в ide
спасибо огромное, очень полезно, а шо по graceful shutdown?
на 55:35 вопрос исчерпан, спасибо
лайк за разговорчики про архитектуру
Спасибо:)
Лайк за разбор данной темы
Спасибо)
Если у вас в микросервисе под 10 юзкейсов и реп и вам нужна DI-система, скорее всего у вас что-то не так пошло на этапе планирования микросервисной архитектуры)
Согласен:) скорее это бывает промежуточным состоянием, при котором принимаем решение распиливать:) а di лично мне на любых размерах кажется кайфовой штукой
🎉
интересно когда-нибудь напишут для go Фреймворки, пока это выглядит, как ранний php, но хотя бы архитектурно придумали как делить это безобразие
Внутри крупных компаний есть:)
Надеюсь, что никогда
Быстрее бы, а то маленькая конкуренция
Ток интерфейсы лучше в месте использования объявлять. Т.е. используешь в сервисе интерфейс репо, там его и объявляешь, указываешь какие методы твоему сервису нужны.
Иначе, если одному сервису нужны одни методы, а другому другие, и оба могут работать с одним и тем же репозиторием, то они будут эмбеддить интерфейс репозитория со ВСЕМИ его методами, а это избыточность и неудобство для программиста.
Я как раз говорил о холиварности этого вопроса) мы осознано выбрали варик как в видео и репо слой немного иначе разбивает, от того неудобства нет
@@olezhek28go Понял-принял.
@@olezhek28goинверсия зависимости направлена не в ту сторону. Бизнес логика зависит от репозитория и его импортирует.
56:55 А если у нас не к одной БД репозитории? Или одна репа к постгре, а другая вообще к S3 storage? Как в данном случае обеспечивать атомарность? Интересно было бы про это посмотреть. Это уже больше в сторону eventual consistency
типо один и тот же интерфейс, а юзаем то постгрю, то с3 или как?)
@@olezhek28go Нет. Допустим в нашем сервисе один репозиторий для хранения метаинформации и связей для картинок. Он к постгре. Второй репозиторий это S3 хранилище. Я исхожу из того что под репозиторием подразумевается любое хранилище - SQL, NoSQL, и т.д. Третий репозиторий это например отдельная БД. Там какая-нибудь статистика. И вот есть бизнес сценарии, когда мы должны консистентно положить или изменить объекты сразу в трех местах. Предположим это такой монолит у нас, или сервис (не микро :) ). Какой подход бы использовал в такой ситуации? МОжет будет идея для видео.
2:37. Использование директории pkg. Если речь о сервисе, то о каком переиспользовании кода говорится? Это получается у одного сервиса зависимость от другого сервиса? Звучит странно. Мб в го так принято, но обычно для переиспользования кода используют библиотеки. Были ли на практике такие примеры, чтобы код из pkg одного сервиса использовался в другом сервисе?
как вариант можно переиспользовать сгенерированный протобафом код)
@@olezhek28go Ну вы так делали когда-нибудь? )
Возвращать интерфейс вместо структуры разве не антипаттерн?
А в чём проблема? Для этого же всё и задумывалось, чтоб абстракцией закрыться)
@@olezhek28go Интерфейса нужно положить туда, где этот интерфейс вызывается. А чтобы закрыть у нас есть инкапсуляция)
Как раз тут и случается срач по поводу интерфейсов:) Кто-то кладет по месту использования, кто-то иначе) так что стоит отталкиваться от того как договорились в комманде
@@olezhek28go так на выходе получаем какой-то конкретный объект, зачем нам возвращать абстракцию? чтобы использоваться полиморфизм, на вход мы получаем абстракцию, а на выходе зачем она непонятно
@@olezhek28goпроблема в том что это не конструктор сущности должен решать какие методы нужно реализовывать возвращать интерфейсом, а тот кто будет пользоваться должен определить нужный ему интерфейс для этой сущности. Конструктор возвращает конкретное(структура), потребители решают какие методы требуются (интерфейс)
Посмотрел разные видосы по чистой архитектуре, единого стандарта тупо нет, каждый городит по своему "как удобнее или как понял" У кого-то Entity,Usecase у кого-то Model, Repository. Давайте еще какой-нибудь "Template" еще введем, чтоб всем дружно гадать, что это такое
Если правильно помню, я об это и говорил) в любом случае на уровне команды лучше устаканивать договоренности такие)
Спасибо, очень понравилось. У меня возник такой вопрос, в чём состоит основное отличие чистой архитектуры от Слоистой архитектуры "Layered architecture" (N-layer). Например, почему представленный пример является чистой архитектурой, а не слоистой (N-layer), так как у меня возникла мысль (возможно неверная, прошу поправить, если это не так), что представленный пример можно было бы отнести к Слоистой архитектуре (N-layer).
для микросервиса покатит) но когда в приложении больше одного сервиса, то без слоя межсервисного взаимодействия будет .опа)
С несколькими еще жить можно, но чем дальше тем хуже, согласен)
Видео уровня junior, причем растянутое
Не найдете ничегоо сложнее, чем просто разделение на репозиторий, сервис, контроллер.
А вы это к чему написали?
ты учился в итмо? если да, то скажи, кто был твоим преподом по джаве
неа, я в Политехе учился)
Опа, новое от Козыря
так меня пожалуй с садика не называли)
А верно ли, что сервисы на одном уровне/слое не должны использовать друг друга? Чтобы не происходило зацикливания.
А почему должно быть зацикливание? Это совершенно не обязательно)
На работе (python/fastapi) начали вводить чистую архетиктуру, интересно посмотреть на всю эту тему со слоями со стороны другого языка
И как в го проще или нет?
@@olezhek28go да трудно сказать, надо попробовать апиху полноценную выкатить, не хватает времени пока. У нас еще авторизация, орм, зависимостей внедрения свои способы. В fastapi уже есть это готовое, на коллектив можно опереться. А так со слоями нормально объяснили в видео -- делать их изолированными полностью, и все ок будет.
А правда что в го можно новичкам идти? Непонятно что лучше взять питон или го?
Конечно можно) в чем проблема?)
Да, лучше питон в руках, чем гоу в кустах
вот говорит, что плюсами покусан, а сам пишет = (*repository)(nil) вместо = new(repository). Что-то тут не так...
Ну все, надо разоблачение снимать))
@@olezhek28go точно! И обязательно сдать своего диллера, который ключи от Goland'а поставляет ))
Олег, отличный контент! Спасибо тебе! Небольшой вопрос: в коде модель репозитория и модель сервиса для User помещены в пакет model. Обе модели с публичной видимостью. В итоге к ним обеим можно обратиться как model.User, но при этом это разные структуры естественно. Возникает некоторая потенциальная путаница и необходимость пользоваться альясами. Это так и задумано? Или в конкретном случае лучше использовать разный нейминг/пакеты? Спасибо!
Спасибо за добрые слова) касательно вопроса - Мы на работе так и юзаем с алиасом) IDE сразу запоминает куда что ведет и импорты автоматом добавляются и путаницы фактически нет) но можно и разные нейминги попробовать)
@@olezhek28go Спасибо еще раз!
на больших бачах конвертер дорого юзать (ещё один проход O(n)), также спорно использовать конвертер на перекладывании одинаковых полей из одной структуры в другую. я лично предпочитаю сквозные дто/модели на микросервис.
прикол что ЧА разрабилась для модульных монолитов
ага, на большых бачах будет грустно( сквозные дтошки мы тоже юзали в другом проекте, сейчас решили иначе)
@@olezhek28go а что повлияло на выбор?
А зачем лочить запись/чтение на уровне репозитория? Обычно сервис работает в сильно больше, чем одном инстансе и мьютекс тут не сильно поможет)
Имхо, я бы решал эту проблему через оптимистические блокировки
всё так, но ролик всё-таки не про распределенные системы, а про архитектуру проекта, поэтому репо слой тут обозначен в упрощенном виде, словно весь трафик льется на один инстанс)
Ну и еще, если юзается инмемори кэш, то он не расползется на все инстансы, так как в оперативе конкретного инстанса лежит, поэтому мьютексы ок будут)
Не понял зачем RLock в гете.
Чтобы запись залочить)
@@olezhek28go пошёл читать доки сразу после просмотра, уже разобрался, спасибо)
Сделайте поправочку только, что, это не та самая "чистая архитектура" как на первой картинке было
А обычная слоистая, трехзвенка в народе
Я уже не помню, что там за пикча была) в целом, если там шестиугольник, то кажется оно тут тоже ложится) или я что-то упускаю?
Привет, спасибо за контент, а стоит проходить курс, если в route256 обучался, в том числе у тебя)? И второй вопрос, на разборе будут показаны куски кода, как было бы правильнее реализовать или дана ссылка на реализацию от преподавателя текущего дз?)
Привет)
1) Если в руте на потоке где я обучал был, то наверное нового будет процентов 40. В целом по программе на сайте можешь оценить)
2) Я буду рассказывать темы, иллюстрируя примерами кода, которые будут доступны обучающимся. Что касается дз, то у меня тоже есть моя реализация, да
а разве было бы не прагматичнее convertor mapper'ом назвать?)
да в целом можно и так) тут скорее зависит как в команде договоришься) мы на конверторе сошлись)
Олег а на собеседованиях DevOps/SRE в Ozon или Avito спрашивают алгоритмы или это только у разрабов?
Честно говоря не знаю, не интересовался на этот счет)
эй.. почему не по схеме explicit architecture? ) один раз бы разобрались, было бы веселее )) А ещё DDD не хватат)
да я рассказывал из своей рабочей практики) а так-то конечно можно намутить будет как-нить урок веселья ради и по тому же DDD) Заодно будет повод лучше разобраться хех
@@olezhek28go это, я так понимаю, вся суть лучших практик по архитектуре - "веселья ради"? 😅
А у кого-то есть пример цепной инициализации DB Client'a в контестке реализации, представленной в этом видео?
Дак а что там сверхъестественного?) принцип же тот же самый
Ну я столкнулся с некоторыми проблемами при попытке реализации, по этому решил спросить
Вопросы все задают вроде как все с опытом, но смотря как чувак распинается объясняя всем что он сделал все на интерфейсах, типа ООП, то понимаешь что многие вообще не знают что такое ООП, и инкапуляция в том числе.
Хотя Go он вообщето задуман как функциональный язык, и че городить ООП, я пока не догнал, за исключением "+" для поддержки проекта.
А закзчику тяжело с сайтом и сервером... дааа ерунда.
В Go коммьюнити вообще как-то странно с пониманием архитектуры сервисов, я заметил
@@JohnGraveв комьюните противостояние очкариков ушедших с плюсов и студентов после питона.
Борьба поколений!
Сорри, но 666 подписичков - пока кто-то не испортит, подписаться религия не позволит.
Уже испортили:(
Прикольно конечно, но я в ахуе с этих названий переменных: r, n, a, b, s. Для реального проекта это конечно будет тот еще пиздец, особенно когда новенькие придут и будут в этом разбираться
Это имена ресиверов и они как раз таки часто именно в таком стиле и задаются в проектах и проблемы в этом нет
@@olezhek28go Ну это в любом случае может ввести в некоторое заблуждение или недоумение неподготовленного человека, ничего не мешает написать название чуть подлиннее, зато любой человек поймет что к чему, да и легче потом в коде будет искать их использование
Таков стиль в гошке:) написать можно, спору нет
а про микросервисы просто умлчал ... попозже - попозже .. и ушел -НЕ красиво
думаю это было в срезанной части) если что на канале есть пара роликов на эту тему
@@olezhek28go спс 👍🏻
Послушал первые 10 минут. Дальше не смог. Формулирование мыслей на уровне 5 класса.
А вы в шестой уже перешли?:)
Высер , завидуй молча
Нормальная подача
@@olezhek28goТы должен, как универский профессор нудно читать из книжки😂
Все курсы и тренинги - вчерашний день, лохотрон) вы там получите как минимум устаревшую информацию) не рекламируйте это.. имейте совесть) в разы эффективней найти себе ментора) и дешевле и полезней
Почему я не могу рекламировать свой собственный курс, материал которого я обновляю) да и разговоры про знания, которые не используются тоже спорный) практики, которые я там рассказываю мы активно юзаем у себя в команде в Авито) ментор тоже хороший способ, спору нет
@@olezhek28go Если вы передаете свой опыт, знания и являетесь ментором для каждого ученика индивидуально - респект вам и уважуха.. если же нет - то те же пожелания наоборот вам.. и геморрой хронический в качестве бонуса)
Большинство коммерческих курсов - да. Но есть бесплатные курсы от компаний, в которых бывает полезно. Проходил такой от МТС пару лет назад, для меня это был легкий способ войти в Go, имея опыт в другом языке. Доступная информация, классные менторы. Практические задания для меня были мотивацией потратить время на изучение языка на практике. После курса получил 3 оффера из бигтехов РФ, в одном из которых работаю до сих пор.
@@user-cq7gb9gj4e Вам повезло) я не имею ввиду, что все вокруг шарлатаны.. всего лишь 99% населения планеты
зная как работает ужасно Авито, лучше всерьез не слушать данный доклад
Зная как устроен интернет, лучше всерьез не слушать комментарии😄
@@olezhek28go согласен, но очень прощу почините Авито уже, так плохо работает =((
Я во внутренних сервисах тружусь, так что над основным сайтом власти не имею(
А че не так с авито? Вроде нормально там ручки отвечают, никогда долго не ждал ответа