en
Feedback

Don't get caught by a cheater! Telemetrio finds and tags such channels 👉 If you want to see the tag, subscribe

PRO Go

PRO Go

Open in Telegram

Изучай язык Go вместе с нами. Закрепить теорию на практике можно на курсе - https://stepik.org/a/158385/pay?promo=0dbf5c609937c00c Подготовится к собеседованиям - https://stepik.org/a/205199/pay?promo=06f35ce5ae028fa2 По всем вопросам: @Santiago_de

Show more
3 304
Subscribers
-224 hours
-137 days
-830 days
Attracting Subscribers
Oct '26
October '26
+8
in 0 channels
September '26
+30
in 0 channels
Get PRO
August '26
+13
in 0 channels
Get PRO
July '26
+15
in 0 channels
Get PRO
June '26
+21
in 0 channels
Get PRO
May '26
+26
in 1 channels
Get PRO
April '26
+44
in 0 channels
Get PRO
March '26
+21
in 0 channels
Get PRO
February '26
+31
in 0 channels
Get PRO
January '26
+53
in 2 channels
Get PRO
December '25
+38
in 0 channels
Get PRO
November '25
+81
in 1 channels
Get PRO
October '25
+103
in 0 channels
Get PRO
September '25
+97
in 0 channels
Get PRO
August '25
+92
in 0 channels
Get PRO
July '25
+145
in 0 channels
Get PRO
June '25
+95
in 0 channels
Get PRO
May '25
+115
in 0 channels
Get PRO
April '25
+121
in 0 channels
Get PRO
March '25
+184
in 0 channels
Get PRO
February '25
+149
in 0 channels
Get PRO
January '25
+201
in 0 channels
Get PRO
December '24
+261
in 0 channels
Get PRO
November '24
+138
in 2 channels
Get PRO
October '24
+181
in 2 channels
Get PRO
September '24
+157
in 0 channels
Get PRO
August '24
+177
in 3 channels
Get PRO
July '24
+234
in 2 channels
Get PRO
June '24
+243
in 2 channels
Get PRO
May '24
+259
in 0 channels
Get PRO
April '24
+258
in 0 channels
Get PRO
March '24
+288
in 0 channels
Get PRO
February '24
+224
in 0 channels
Get PRO
January '24
+164
in 0 channels
Get PRO
December '23
+173
in 2 channels
Get PRO
November '23
+118
in 1 channels
Get PRO
October '23
+9
in 0 channels
Get PRO
September '23
+203
in 0 channels
Get PRO
August '23
+1 043
in 0 channels
Date
Subscriber Growth
Mentions
Channels
17 October0
16 October0
15 October0
14 October0
13 October+1
12 October0
11 October+1
10 October0
09 October+1
08 October0
07 October+2
06 October0
05 October+1
04 October+1
03 October0
02 October+1
01 October0
Channel Posts
Как восстановить доступ к курса пока Stepik недоступен🙏 Stepik сейчас недоступен, но твоё обучение никуда не делось. Все курсы и прогресс сохранены у нас на платформе, а вернуть доступ можно за пару минут. Делаем по шагам. Шаг 1. Зайди на платформу обучения и войди в аккаунт. Если аккаунта ещё нет, зарегистрируйся. Шаг 2. Открой свой профиль. Там есть блок с курсами. Если курсы уже на месте, нажимай продолжить и учись с того места, где остановился. На этом всё. Шаг 3. Курсов нет? Не переживай. Оставь заявку личному наставнику и нажми кнопку Хочу наставника. Он сам свяжется с тобой, уточнит все моменты и поможет получить доступ к твоим курсам. Искать данные заранее не нужно. Если тебе на почту пришло письмо Восстановление пароля от платформы, всё в порядке. Это значит, что мы уже связали твой аккаунт со Stepik. Перейди по ссылке из письма, задай пароль и войди. Курсы будут на месте. Если сегодня мы не успеем написать кому-то из вас, не волнуйтесь. Завтра с утра отработаем всех оставшихся.

2
Друзья, доброго дня! Как многие уже заметили, Stepik уже несколько дней не работает🥺 — авария у облачного провайдера, часть инфраструктуры сейчас переносят к новому. По последнему апдейту (12 октября) восстановление идёт штатно, но точных сроков пока не называют: данных очень много — курсы, которые авторы создавали годами, и решения миллионов учеников. Как появятся сроки — команда Stepik обещала написать. Следить за новостями можно в их группе: vk.ru/rustepik 🔨А у меня тем временем — новость, которую я придерживал. Мы с командой уже давно делаем свою платформу: iron-programmer.ru Не презентовал её раньше, потому что она была ещё в разработке. Но раз ситуация экстренная — показываю. Это тот же Stepik, только лучше: с блэкджеком и стриками 😄 Что там уже есть: — во вкладке Мои курсы — все ваши курсы, ровно на том шаге, где вы остановились; — общий чат с учениками и преподавателями; — тема интерфейса — светлая или тёмная, как вам удобнее; — за прохождение курсов начисляется не только опыт, но и своя валюта — монеты: их дают за решённые задачи, пройденные курсы, достижения и ежедневную серию. Монеты можно обменять на мерч в нашем магазине — блокноты, кружки, резиновые уточки-дебаггеры и другое; И это только начало — платформа будет расти дальше. Регистрируйтесь и продолжайте учиться: iron-programmer.ru Если будут вопросы — пишите мне или своему личному наставнику.
407
3
#memes
#memes
525
4
Где хранить данные 💾 Классическая история. Написана первая серьёзная программа — консольный список задач. Добавил задачу, она появилась в списке. Работает прекрасно, пока не закрыл терминал. Закрыл, открыл заново — список пустой. Как будто ничего и не было. Первое, что приходит в голову почти всем — сохранять список в файл перед выходом, а при старте читать обратно. JSON-файл, читаешь — пишешь, несложно. И это действительно работает, пока список открыт из одного места. А вот если запустить ту же программу в двух терминалах одновременно — один из них благополучно затирает то, что успел дописать второй. Оба читают файл целиком, оба пишут файл целиком, кто последний сохранил — тот и прав. Вот тут и становится понятно, зачем вообще нужны базы данных. Не потому что файл это «неправильно», а потому что файл не умеет того, что нужно почти любому реальному проекту: пускать к данным сразу несколько программ без того, чтобы они друг друга затирали, находить одну нужную запись без перечитывания всего файла, гарантировать, что два связанных изменения либо оба применились, либо не применилось ни одно. Файлами эту проблему можно латать довольно долго, но рано или поздно упираешься в одну и ту же стену 👴
573
5
Вайбкодеры напряглись
Вайбкодеры напряглись
995
6
sql.Open 🔌 Помню, как в первый раз полез из Go в базу и минут сорок не понимал, почему всё работает. Взял пример из документации, подставил свой DSN, запустил — ошибок нет. Обрадовался, пошёл писать дальше. А потом на первом же запросе выяснилось, что пароль я вписал от другой базы. И всё это время sql.Open спокойно возвращал мне nil вместо ошибки. Оказалось, он туда и не ходил 😅 sql.Open не подключается. Он смотрит, что драйвер с таким именем зарегистрирован, разбирает строку подключения и отдаёт объект. Если в DSN синтаксическая опечатка — вот её покажут сразу. А жив ли сервер и верный ли пароль, на этом этапе не проверяет никто. В доке так и написано, «Open may just validate its arguments without creating a connection». Для настоящего похода в базу есть db.Ping(). Меня это тогда здорово сбило, потому что в других языках открыл — значит открыл. Ну и вдогонку, раз уж про это. То, что возвращает Open, вообще не соединение, а пул. Он сам открывает их столько, сколько нужно, сам переиспользует, лезть к нему из горутин одновременно можно. Один такой на всё приложение. Видел код, где его звали в каждом хендлере. Вот это больно: пулы плодятся, база захлёбывается коннектами, а по коду всё выглядит опрятно.
930
7
#memes
#memes
971
8
#memes
#memes
1 069
9
No text...
1
10
Сегодня 256-й день года — а значит, День программиста 🎉 256 — это 2⁸, ровно столько значений помещается в один байт. Забавно, что праздник выбрали именно так: не по календарю, а по степени двойки. Очень в духе профессии. Хочу поздравить всех, кто сегодня читает этот канал — и тех, кто уже пишет на Go, и тех, кто только присматривается. Отдельный привет тем, кто прямо сейчас откладывает баг на разберусь завтра — мы все так делали, и ничего, живы. Пусть err почаще будет nil, горутины не текут, а go build с первого раза показывает заветное ничего не выведено — значит, всё скомпилировалось 😄 С праздником! Спасибо, что вы рядом ❤️
856
11
Про гонки данных🏁 Есть у конкурентности особый сорт багов, после которых хочется закрыть ноутбук и пойти погулять. Тесты зелёные, локально всё сходится. А потом приходит отчёт с прода, и сумма в нём меньше, чем должна быть. Не вдвое, а вот на чуть-чуть, будто пара операций куда-то потерялась по дороге. Они и правда потерялись. Дело в том, что counter++ только выглядит как одно действие. На самом деле это прочитать, прибавить, записать обратно. И если между «прочитать» и «записать» в ту же переменную успела влезть соседняя горутина, её работа затирается. Без ошибки и без паники. Обиднее всего, что повторить это специально почти нереально. Запускаешь двадцать раз, двадцать раз всё хорошо. Поэтому такие штуки спокойно живут в проекте месяцами и вылезают в самый неподходящий момент. Но ловить их Go умеет сам: go test -race Он расставляет проверки и прямо показывает, какие горутины полезли в одну память и в каких строчках. Первый запуск -race на своём проекте — обычно смешанные ощущения, потому что почти всегда там находится что-то, о чём ты не подозревал. Про все это вы узнаете в курсе PRO Go Для продвинутых. Скидка 20% до конца этого дня, поспешите ❤️
837
12
Про sync.WaitGroup⏳ В прошлый раз остановились на неприятном: горутину запустили, а main закончился раньше, чем она успела хоть что-то сделать. Сегодня про то, как это лечится по-человечески. Первое, что приходит в голову — заткнуть дыру задержкой. time.Sleep(time.Second) Работает ровно до того дня, когда сеть притормозит и секунды не хватит. А если поставить запас побольше, программа будет честно стоять на месте даже тогда, когда всё давно готово. Гадание, а не синхронизация. Нормальный инструмент называется sync.WaitGroup. По сути это счётчик горутин, которых мы ждём. var wg sync.WaitGroup for _, city := range cities { wg.Add(1) go func(city string) { defer wg.Done() fetchWeather(city) }(city) } wg.Wait() Три метода, и на этом всё. Add(1) — добавили горутину, которую надо дождаться. Done() — эта закончила, счётчик минус один. Wait() — стоим здесь, пока счётчик не обнулится. Приятная мелочь: var wg sync.WaitGroup уже готов к работе, никаких New и инициализаций. Нулевое значение и есть рабочее, в Go так устроено много чего. defer перед wg.Done() тоже не для красоты. Если внутри горутины случится паника или ранний return, Done без defer просто не вызовется, счётчик никогда не дойдёт до нуля, и Wait будет ждать вечно. Причём программа не упадёт с ошибкой, а именно зависнет — отдельное удовольствие ловить такое в проде. Ну и главная ловушка, на которой спотыкаются почти все. Add обязан стоять до go, а не внутри горутины. go func() { wg.Add(1) // так нельзяdefer wg.Done() ... }() Выглядит-то логично, горутина сама себя посчитала. Но main в этот момент бежит дальше и вполне может добраться до Wait раньше, чем горутина вообще стартует и что-то прибавит. Счётчик ноль, Wait решает, что ждать некого, программа идёт дальше без результатов — то есть мы вернулись ровно к той проблеме, с которой начинали, только теперь она замаскирована правильно выглядящим кодом. Как выглядит счётчик по шагам, почему порядок завершения горутин не важен, и что делать, когда горутин заранее неизвестно сколько — всё это в модуле, там же задания, где это надо написать руками и посмотреть, как оно себя ведёт. Напоминаю, что скидка 20% на курс PRO Go Для продвинутых всё ещё действует, но остаётся всего два дня❤️
658
13
#memes
#memes
569
14
Про горутины🔨 Раз уж завёл новый модуль, «Конкурентность», грех не рассказать, что в нём внутри, чуть подробнее, чем влезает
Про горутины🔨 Раз уж завёл новый модуль, «Конкурентность», грех не рассказать, что в нём внутри, чуть подробнее, чем влезает в одну строчку анонса. Начну с первой главы — она про горутины, и с них, по-хорошему, начинается сам Go как язык для параллельной работы. Горутина — это кусок кода, который выполняется не по очереди с остальной программой, а сам по себе, параллельно. Обычно код идёт строка за строкой, одна дожидается другой. Горутина — способ сказать «а вот эта часть пусть работает отдельно, не жди её, иди дальше». В большинстве языков, чтобы так сделать, нужен отдельный объект-поток, пул под него, настройки размера — в общем, дело. В Go для этого есть одно слово. go fetchWeather("Москва") go fetchWeather("Питер") Вот и всё, обе функции побежали сами по себе, а рантайм сам разложит их по реальным ядрам процессора. И не только эти две — тысячи горутин запросто уживаются там, где обычная ОС-шная нить уже давно бы легла. Горутина занимает пару килобайт стека, который при необходимости растёт, а не фиксированные мегабайты, как у настоящего потока, поэтому «запустить ещё одну» почти ничего не стоит. Нюанс в том, что «запустить» и «дождаться» — это разные глаголы. Горутина не «выполнись прямо сейчас», а «выполнись, когда получится, а мы пока пойдём дальше». func main() { go fetchWeather("Москва") } // main уже закончился, а горутина, скорее всего, даже не успела стартовать Если её явно не дождаться, main может преспокойно закончиться раньше, чем горутина хоть что-то сделает — и в результате тишина вместо данных. Про то, как её правильно ждать (и что будет, если сделать это неправильно), — в новом модуле курса, PRO Go для продвинутых. В честь начала учебного года и выхода модуля дарю вам скидку 20% на курс🌈. Скидка действует ровно неделю.
611
15
🧙 Свершилось то, чего многие ждали. В курсе PRO Go. Для продвинутых появился новый модуль Конкурентность. Семь уроков про то, как заставить программу делать несколько дел одновременно и не получить в ответ кашу. Горутины, WaitGroup, гонки данных, мьютексы, каналы, select и context. Начинается всё с классики: запустил горутины, программа честно отработала, а в результате нули. Потом выясняется, что данные, к которым лезут сразу с нескольких сторон, портятся молча и далеко не при каждом запуске, из-за этого такие баги и живут в проекте месяцами. Ближе к концу разбираемся, как всю эту параллельную работу вовремя останавливать, если результат уже никому не нужен. Практики привычно много: 78 заданий, 30 из них на написание кода с нуля. Ну и схемы с разборами ловушек, куда без них. И ещё бонус, раз всё так совпало. В честь начала учебного года и выхода модуля дарю вам скидку 20% на курс (действие скидки действует ровно неделю). Удачи в изучении ❤️
682
16
🕺💃🕺💃 #memes
🕺💃🕺💃 #memes
790
17
Решил постараться для вас и порадовать ещё одним обновлением курса PRO Go для продвинутых — модуль про тестирование вырос ещё на четыре главы 🥺 Продолжаем тему с прошлого раза. Теперь курс учит не просто писать тесты, а по-настоящему им доверять. Разбираем покрытие тестами — как понять, какие ветки кода вообще ни разу не выполнялись, и почему зелёный PASS ещё ничего не гарантирует. Дальше учимся измерять, а не гадать: бенчмарки показывают, что стало быстрее или медленнее, а профилирование — в какой именно функции реально тратится время (спойлер, часто не там, где кажется). И закрываем тему гигиеной — как аккуратно готовить и убирать за тестами, чтобы они не мешали друг другу. Как обычно — на каждую тему есть и лекция, и куча заданий на закрепление. Удачи в изучении ❤️
794
18
Вышло новое обновление курса PRO Go для продвинутых — добавили сразу три главы, и это, кажется, одна из самых практичных тем во всём курсе. Разбираемся, как писать тесты, которые ловят баги, а не просто существуют для галочки. Пройдём путь от самого первого теста до приёмов, которыми пользуются в боевых проектах, когда код завязан на что-то внешнее — например, на сервис в интернете, который нельзя дёргать в каждом тестовом запуске. Без спойлеров — но после этих глав по-другому смотришь на то, что значит код, в который можно спокойно вносить изменения и ничего не сломать. Как обычно — на каждую тему есть и лекция, и куча заданий на закрепление: квизы, сопоставления, задачи на программирование. Тем, кто уже в процессе — удачи с новыми главами, вы отлично держите темп 💪 Тем, кто ещё присматривается — самое время начать! Не забывайте, что для всех тех, кто прошел PRO Go Основы программирования, есть скидка. Что бы её получить, вам нужно всего лишь написать мне) Спасибо, что вы рядом ❤️
752
19
Советуем))) #memes
Советуем))) #memes
742
20
Вышел Go 1.27 ❤️ Вчера команда языка выпустила новую версию. Почти всё старое продолжит работать, а внутри есть несколько приятных обновлений. Главное, чего многие ждали ещё с появления дженериков: теперь методы тоже могут иметь свои типовые параметры. Раньше для этого приходилось выносить функции на уровень пакета, теперь можно писать ближе к самому типу. Ещё из того, что сразу заметно: • появился encoding/json/v2 • в стандартной библиотеке есть пакет uuid • маленькие объекты стали аллоцироваться быстрее Если хочется посмотреть своими глазами — вот официальный пост ⬇️ Скачать go 1.27
861