gram news
go-with-me channel avatar

go-with-me

@golangwithus

go-with-me — уютный канал, где Golang становится дружелюбным Мы — Go-инженеры в BigTech, обожаем делиться своей экспертизой, пишем статьи о скрытых ловушках, объясняя все на пальцах — Проводим Go-моки questions @lovelygopher

ProjectsRUProgramming

1,850subscribers

Open the Channel

Latest posts

  • go-with-me

    16 Mar, 08:02edited

    🔸 Claude WorkflowВсем доброго дня!В тематику предыдущего поста хочется поделиться с вами тем, над чем мы с подругой кропотливо работали относительно долгое времяДанная репа — полноценный воркфлоу для Claude (и не только!), который позволяет: 🟠Подробно изучать ваши проекты 🟠Создавать для них тематические скиллы 🟠Выполнять ваши задачи продуманно и автономноПроект: тыкБудем рады вашему фидбеку в комментариях!Stay tuned 🐶#claude #golang
    Telegramgo-with-meAnthropic говорит, что ИИ убивает джунов Ребята, очень буду благодарен репостам/ссылкам/лайкам :) Ребята, написал разбор на Хабр, не смог пройти мимо Стэнфорд + Anthropic выкатили исследование на 3.5 млн работников - мол, "молодые теряют до 16% занятости…
    4,380206111Open in Telegram
  • go-with-me

    15 Mar, 13:22

    forwarded from @zergslaw_channel

    Anthropic говорит, что ИИ убивает джуновРебята, очень буду благодарен репостам/ссылкам/лайкам :)Ребята, написал разбор на Хабр, не смог пройти мимоСтэнфорд + Anthropic выкатили исследование на 3.5 млн работников - мол, "молодые теряют до 16% занятости из-за ИИ", а медийка подхватила как обычно - "ДЖУНЫ НЕ НУЖНЫ, РАСХОДИМСЯ"Но чем глубже копал, тем больше понимал - исследование берёт период, когда ставка ФРС улетела с 0% до 5.5%, Big Tech уволил 300 000+ человек, венчур просел на 35%, а 94% бизнеса вообще не внедрили ИИ. Как технология при 6% проникновения может быть причиной обвала найма? :DИ момент который не влез в статью - API всех этих компаний сейчас субсидируются ниже себестоимости. Когда субсидии кончатся, половина "автоматизаций" перестанет быть рентабельнойСпрашивать у Anthropic "убивает ли ИИ рабочие места" это как спрашивать у парикмахера нужно ли стричьсяПодробн
    2,9802742Open in Telegram
  • go-with-me

    22 Nov 2025, 13:41edited

    💥sync package. Cond's hidden trap В этот раз поговорим про sync.Cond и убедимся, что этот примитив небезопасно использовать без оглядки на важную штуку...Одна забытая проверка — и ваши горутины повиснут навечно, инициируя OOM Killed1. Preface Cond — примитив синхронизации для ожидания услови(я|ий) без busy-waiting с возможностью единичного и множественного пробужденийНа поверхности мы имеем 3 метода: — Wait — отпустить мьютекс, запарковаться, получить уведомление, распарковаться, взять мьютекс — Signal — разбудить один поток по FIFO-принципу — Broadcast — разбудить все потокиТипичный паттерн использования: cond.L.Lock() for !condition { cond.Wait() // Ждем cond.Signal() или cond.Broadcast() } cond.L.Unlock()
    Image from a post by go-with-meImage from a post by go-with-me
  • go-with-me

    21 Sept 2025, 19:26edited

    👻 Concurrency Patterns. BridgeСледующая ступень после Or Done Channel паттерна — Bridge. Сначала разберемся с какой ситуацией помогает бороться эта модельПредставим, что у нас время от времени динамически появляются каналы с данными, и их число заранее неизвестно. Все эти стримы мы хотим слить в единый канал, откуда и планируем получать данные. Наш потребитель как раз и будет высасывать все-все из этого стримаКратенько: — Источники (каналы) создаются динамически (по событиям / шардам / тайм-слайсам) — Внутренние каналы имеют свой lifecycle, по истечении которого закрываются — Потребителю нужна единая точка чтения, без координации множества каналовПеред освоением данного материала рекомендуем обратиться к статье про Or Done ChannelНу что ж, поехали!1. Synchronous Bridge В синхронной версии бриджа мы будем дрейнить данные из поступающих
    Image from a post by go-with-meImage from a post by go-with-me
    5,170116Open in Telegram
  • go-with-me

    20 Sept 2025, 08:40edited

    😠 Concurrency Patterns. Or Done ChannelОтгремев на MTC True Tech Go и собравшись с силами, мы решили порадовать вас новым постом!Сегодня вещаем о таком механизме как Or Done ChannelOr Done Channel применим, когда мы выполняем какую-то операцию и зависимы от пачки ивентов завершения. Под пачкой ивентов подразумевается множество каналов, которые в неопределенный момент присылают токен завершения (к примеру пустую структуру)Пу-пу-пу, погнали!Обсудим использование этого паттерна на примере обычной перекладки значения из одного канала в другой1. Базовый случай func OrDoneT any <-chan T { out := make(chan T)go func() { defer close(out) for { select {
    Image from a post by go-with-meImage from a post by go-with-me
    3,49065Open in Telegram
  • go-with-me

    13 Sept 2025, 12:40

    Image from a post by go-with-meImage from a post by go-with-meImage from a post by go-with-me
  • go-with-me

    11 Sept 2025, 21:01

    2,950file15Open in Telegram
  • go-with-me

    11 Sept 2025, 21:01edited

    Презентация моего доклада для тех, кто просил!
    3,03014Open in Telegram
  • go-with-me

    11 Sept 2025, 18:00

    forwarded from @ntuzov

    🥂Выпуск про Go 1.25 уже доступен / GoGetPodcast 17https://youtu.be/fHuJNsZPCJ0Этого ролика вам точно будет достаточно для полного понимания нововведений, вне зависимости от вашего опытаПодробно обсудили, что нового в новой версии, зачем это нужно, как оно устроено, в сложных местах делали ликбез для лучшего понимания изменений. Дима был очень хорош, такого подробного разбора вы больше нигде не увидите, а с комментариями Глеба оно ещё круче, очень рекомендую.Напоминаю, что теперь я буду выкладывать новые выпуски подкаста на отдельном канале, чтобы не смешивать столь разный контент.🟢Наш подкаст обычно собирает значительно меньше просмотров, чем прочие мои ролики. При этом я знаю, что есть люди, которые очень его любят. Поэтому, если он вам интересен, вы можете помочь алгоритмам Ютуба в его продвижении:- Досмотр
    YouTubeGo v1.25 — Глубокий разбор всех изменений | GoGetPodcast №17Подробно обсудили - что добавилось в новой версии Go 1.25, зачем всё это нужно, как с этим работать. Go 1.25 Release Notes: https://tip.golang.org/doc/go1.25 Состав: - Николай Тузов - Глеб Яльчик - Дмтрий Матрёничев, ведёт шикарный ТГ-канал по Go: http…
    2,51054Open in Telegram
  • go-with-me

    31 Aug 2025, 15:25edited

    ⚡️ Concurrency Patterns. Fan In В предыдущем посте мы немного напутали с определением такого многопоточного паттерна как Fan OutНа деле мы показывали Tee, который распространяет одно и то же значение V из канала-источника на N каналов-потребителейОтличие Fan Out от Tee в том, что на N каналов распространяются разные значения из одного канала-источника. Тобишь, воркеры тянут значения из одного канала, борясь за них насмертьЛирическое отступление закончено, наша совесть чиста, а сегодняшняя тема будет посвящена Fan InЭтот паттерн является обратным для Fan-Out. Мы собираем данные из нескольких каналов-источников и направляем их в один общий канал-потребитель1. Default Итак, что мы имеем? — Есть воркеры — они кладут значения в N каналов и являются продьюсерами — Каждый из этих N каналов будет получать значения от своего продьюсера. Назовем такие
    Image from a post by go-with-meImage from a post by go-with-me
    10,200151Open in Telegram
  • go-with-me

    29 Aug 2025, 09:11edited

    💭 ОпросРебята, напишите в комментарии о том, что хотели бы увидеть в многопоточке.Хотим слышать вас!👀 Stay tuned!
  • go-with-me

    15 Aug 2025, 09:59edited

    🥚 True Tech Go: митап для Go-разработчиков от МТС🗓 Когда? — 11 сентября 2025 | 19:00 по Москве🌐 Формат — офлайн и онлайнСписок докладов: — Дмитрий Мамыкин (T-Bank) - WaitGroup Pitfalls — разберём, как привычный sync.WaitGroup может приводить к паникам, заглянем под капот, посмотрим на устройство и работу Add, обсудим альтернативы (conc.WaitGroup, sync.errgroup) и поделимся практиками для безопасного использования— Виталий Левченко (Wildberries) - Рассмотрим примеры использования LLM для автоматизации рутинных задач, повышения производительности, улучшения читаемости и надежности кода— Владимир Марунин (MWS) - Разберём обновлённый в Go 1.24 sync.Map: как он обходится без глобальных блокировок, сколько памяти съедает на запись и зачем тут пакет uniq— Роман Ерема (MWS) - В
    Image from a post by go-with-meImage from a post by go-with-me
    5,660115211Open in Telegram
  • go-with-me

    14 Aug 2025, 21:28edited

    ☀ Concurrency Patterns. Fan OutДля начала разберемся в термине Fan Out. Частенько возникают такие ситуации, когда нам необходимо распространить одно и то же значение на несколько потоков, используя каналы. С этой задачей отлично справляется паттерн Fan OutВы наверняка миллион раз использовали его, но вопрос только в том, насколько осознанно вы это делали. Поэтому на сегодняшней повестке дня вариативность реализаций данного паттернаВ базовом случае мы имеем чот такое: package mainimport ( "fmt" "math/rand" "time" )func main() { src := make(chan int) dest1 := make(chan int) dest2 := make(chan int)
    Image from a post by go-with-meImage from a post by go-with-me
    3,81017221Open in Telegram
  • go-with-me

    9 Aug 2025, 13:51edited

    😁 Напоминание: Мы проводим Go мок-собеседованияДля чего это вам? Мок позволяет предметно оценить свои знания, снять лишний стресс перед реальным собесом и понять, где именно зарыты пробелыЧто будет на моке? — Разберём теорию от основ до глубоких нюансов — Погоняем лайвкодинг с задачами уровня реального собеса — Разберём concurrency-паттерны и оптимизации⚙️Ведём вдвоём — будет чуть сложнее, но интереснее!Дадим честный и подробный фидбэк с материалами для прокачкиЗаписаться: @lovelygopher Отзывы: тык
  • go-with-me

    9 Aug 2025, 13:38edited

    ☀️ Новая статья бьёт по всем фронтам — Fan Out, Fan In, bounded и unbounded — мы разложили всё по полочкам!Гофер снова в деле и готов к самому шумному и многопоточному экспериментуПо известной схеме: если вам не терпится, можете получить Early Access. Для этого достаточно просто забустить наш канал. Помогите нам сохранить уют, это очень важно ❗❤ Кто бустил ранее и хочет заполучить ранний доступ, отпишите в личку @lovelygopherBOOST BOOST BOOSTStay tuned 😬
    Image from a post by go-with-meImage from a post by go-with-me
  • go-with-me

    1 Aug 2025, 16:55edited

    🤪 WaitGroup PitfallsСегодня речь пойдет про крайние случаи при работе с WaitGroup, о которой мы уже говорили в предыдущем посте. Советую обратиться к нему с целью изучения внутренней структуры этой сущности и понимания того, что такое counterПредлагаю незамедлительно приступить к делу!1. Паника при негативном счетчике Запомните ключевое - Done под капотом является вызовом Add со значением -1 (тык). Основываясь на внутрянке метода Done и внутренней имплементации метода Add, в котором заложена паника после инкрементации аргумента delta (тык & тык), можно вывести следующие правила: — При прямом вызове Add с отрицательным аргументом delta необходимо быть уверенными в том, что мы не уйдем в отрицательный counter — Количество вызовов Done должно быть равно сумме аргументов всех Add func A() { var wg sync.WaitGroup wg.Add(1)go func() { defer wg.Done()
    Image from a post by go-with-meImage from a post by go-with-me
    2,960135Open in Telegram
  • go-with-me

    29 Jul 2025, 10:53edited

    🤪 Surprising WaitGroup PanicЧасто ли вы ловили паники, используя WaitGroup? - не думаем. Сегодняшняя история об одной из таких, зарытой где-то в недрах, вас очень удивитНе будем томить, приступаем!Для начала рассмотрим избитую структуру: type WaitGroup struct { noCopy noCopystate atomic.Uint64 // high 32 bits are counter, low 32 bits are waiter count. sema uint32 } — noCopy - специфическая структура, используемая утилитой govet для маркировки откопированных значений — sema - используется внутренними функциями пакета sync, чтобы реализовать блокировку и разблокировку — state - отвечает за счетчик и количество ожидающих горутинУглубимся в рассмотрение поля state: — Старшие 32 бита представляют из себя счетчик, который инкрементируется при вызовах Add(N) и декрементируется при вызовах Done() — Младшие 32 бита являются количеством ожидающих потоков
    Image from a post by go-with-meImage from a post by go-with-me
    3,74016851Open in Telegram
  • go-with-me

    27 Jul 2025, 22:19edited

    ☀️ Новая статья многогранна и многопоточна, это наконец-то случилось!Гофер готовится к самому загадочному и долгому исследованию. Надеемся, что вы тоже готовы!По известной схеме: если вам не терпится, можете получить Early Access. Для этого достаточно просто забустить наш канал. Помогите нам сохранить уют, это очень важно ❗❤ Кто бустил ранее и хочет заполучить ранний доступ, отпишите в личку @lovelygopherBOOST BOOST BOOSTStay tuned 🦴
    Image from a post by go-with-meImage from a post by go-with-me
    2,290521Open in Telegram
  • go-with-me

    21 Jul 2025, 22:24edited

    🎨 Interface ComparisonsВ этот раз поговорим про сравнения интерфейсов и развеем все мифы, которые вы могли встретить на своем путиНюансы в этой теме важны для понимания ввиду возможности паник при использовании некорректных нижележащих сущностейДля начала взглянем на структуру не пустого интерфейса: type iface struct { tab itab data unsafe.Pointer } — С полем data все прозрачно - это непосредственно те данные, которые мы закладываем при присваивании интерфейсу какого-то значения — itab содержит метаданные об интерфейсе, о реализующем его типе и методахКлючевое: при сравнении не пустых интерфейсов мы сравниваем две структуры iface: itab и data. В случае с пустыми интерфейсами eface сравниваем не itab, а сам тип _typeПриступим к рассмотрению боевых примеров!1. Сравнение простых композитных типов В данном случае все достаточно тривиально, itab
    Image from a post by go-with-meImage from a post by go-with-me
    2,980331781Open in Telegram
  • go-with-me

    9 Jul 2025, 15:14edited

    🍀 Defer 3. PanicsПо просьбам почтенной публики разберем примеры возможных случаев обработки паники: 1. Подъем значения паники из функции 2. Попытка отловить панику в отдельном потоке 3. Два способа прерывания жизненного цикла N-1 горутин в случае паники одной из N1. Подъем значения паники из функции — Задача: отловить панику, которая возникла в вызываемой функции — Подзадача: как-то пробросить значение паники на верхний уровень — Решение: в вызывающей функции регистрируем defer с методом recover(). Когда вызываемая функция паникует, паника поднимается до первого встреченного defer — Заметка: в случае паники она будет захендлена первым recover в блоке defer. А чтобы поднять значение отловленной паники "наверх", нам необходимо повторно запаничить для поиска следующего хендлера func Outer() { defer func() { if v := recover(); v != nil { fmt.Println("pan
    Image from a post by go-with-meImage from a post by go-with-me
    3,060187221Open in Telegram