How Go Schedules Millions of Goroutines: A Deep Dive into GMP
https://medium.com/@Realblank/how-go-schedules-millions-of-goroutines-a-deep-dive-into-gmp-0f05c71204bc
Imagine a bustling airport with a limited number of runways (CPU cores). Thousands of flights (goroutines) need to take off and land efficiently. How do you prevent chaos and ensure no flight is stuck on the tarmac forever? Go’s answer to this air traffic control problem is its ingenious GMP scheduler. It’s the silent maestro conducting the orchestra of your concurrent code. In this article, we’ll move from the control tower view down to the runway tarmac, exploring how Goroutines (G), OS threads (M), and Processors (P) collaborate to keep your application’s traffic flowing smoothly, even during peak load.
Go’s concurrency story is powered by a user space scheduler built around three entities: G, M, and P. Understanding how the scheduler maps millions of goroutines onto a limited number of OS threads helps you write services that scale, diagnose latency spikes, and avoid resource pitfalls.
https://medium.com/@Realblank/how-go-schedules-millions-of-goroutines-a-deep-dive-into-gmp-0f05c71204bc
Default Methods in Go
https://mcyoung.xyz/2025/08/25/go-default-methods
Go’s interfaces are very funny. Rather than being explicitly implemented, like in Java or Rust, they are simply a collection of methods (a “method set”) that the concrete type must happen to have. This is called structural typing, which is the opposite of nominal typing.
Go interfaces are very cute, but this conceptual simplicity leads to a lot of implementation problems (a theme with Go, honestly). It removes a lot of intentionality from implementing interfaces, and there is no canonical way to document that A satisfies1 B, nor can you avoid conforming to interfaces, especially if one forces a particular method on you.
It also has very quirky results for the language runtime. To cast an interface value to another interface type (via the type assertion syntax a.(B)), the runtime essentially has to use reflection to go through the method set of the concrete type of a. I go into detail on how this is implemented here.
Because of their structural nature, this also means that you can’t add new methods to an interface without breaking existing code, because there is no way to attach default implementations to interface methods. This results in very silly APIs because someone screwed up an interface.
https://mcyoung.xyz/2025/08/25/go-default-methods
surf
https://github.com/enetx/surf
Surf is a powerful, feature-rich HTTP client library for Go that makes working with HTTP requests intuitive and enjoyable. With advanced features like browser impersonation, JA3/JA4 fingerprinting, and comprehensive middleware support, Surf provides everything you need for modern web interactions.
https://github.com/enetx/surf
goqueue
https://github.com/saravanasai/goqueue
GoQueue is a flexible background job processing library for Go applications, designed to handle workloads of any scale with multiple backend options.
https://github.com/saravanasai/goqueue
gonzo
https://github.com/control-theory/gonzo
A powerful, real-time log analysis terminal UI inspired by k9s. Analyze log streams with beautiful charts, AI-powered insights, and advanced filtering - all from your terminal.
https://github.com/control-theory/gonzo
Go is still not good
https://blog.habets.se/2025/07/Go-is-still-not-good.html
Previous posts Why Go is not my favourite language and Go programs are not portable have me critiquing Go for over a decade.
These things about Go are bugging me more and more. Mostly because they’re so unnecessary. The world knew better, and yet Go was created the way it was.
For readers of previous posts you’ll find some things repeated here. Sorry about that.
https://blog.habets.se/2025/07/Go-is-still-not-good.html
tview
https://github.com/rivo/tview
This Go package provides commonly used components for terminal based user interfaces.
https://github.com/rivo/tview
mtlog
https://github.com/willibrandon/mtlog
Serilog-inspired structured logging for Go with message templates, rich formatting, and native Seq support
https://github.com/willibrandon/mtlog
Backend-митап в Москве: многопоточность, микросервисы, prompt engineering и System Design
• 20 сентября
• Пространство «Весна»
Если хочешь разобраться глубже в backend-разработке, системном дизайне, алгоритмах и многопоточке — приходи.
Говорим по существу — про то, что важно в работе и на собеседованиях:
– как строить микросервисы, не превращая код в ад;
– что ждёт на System Design-интервью и как его пройти.
– как готовиться к собесам и системно учить алгоритмы;
– как устроена модель памяти Go и где тебя может поджидать баг.
🎓 Программа
15:00 – 15:30 – Общий сбор
15:30 – 15:50 – Нетворкинг - разделимся на группы, пообщаемся и заведем новые знакомства
15:50 – 16:30 – Игорь Панасюк (Senior в Яндекс) «Особенности и ловушки модели памяти в Go: тайны синхронизации»
16:30 – 17:10 – Леонид Ченский (TeamLead в OzonTech) «Пишем микросервисы на Go как в BigTech, с нуля»
17:10 – 17:30 – Перерыв на фуршет
17:30 – 18:10 – Сергей Венецкий (ex-разработчик в EPAM) «LLM под капотом: как правильно писать промпты»
18:10 – 18:50 – Владимир Балун (ex-TeamLead в Яндекс) «Как пройти System Design интервью: взгляд со стороны интервьювера и кандидата»
18:50 – 19:00 – Завершение контентной части, фотосесия
19:00 – 20:00 – Фуршет и нетворкинг на площадке
20:00 - Afterparty - по желанию едем в бар неподалеку и продолжаем общение в неформальной обстановке
🎁 Подарки за лучшие вопросы:
— книги по backend разработке от спикеров
— сертификаты на бесплатное обучение на любом из курсов школы
— бесплатные mock-собеседования от интервьюверов из BigTech
— скидки на обучение в нашей школе
Место: Пространство «Весна»
Спартаковский переулок 2с1, подъезд 7
5 минут от м. Красносельская
7 минут от м. Бауманская
❗ Количество мест ограничено - приобрести билет можно по ссылке
• 20 сентября
• Пространство «Весна»
Если хочешь разобраться глубже в backend-разработке, системном дизайне, алгоритмах и многопоточке — приходи.
Говорим по существу — про то, что важно в работе и на собеседованиях:
– как строить микросервисы, не превращая код в ад;
– что ждёт на System Design-интервью и как его пройти.
– как готовиться к собесам и системно учить алгоритмы;
– как устроена модель памяти Go и где тебя может поджидать баг.
15:00 – 15:30 – Общий сбор
15:30 – 15:50 – Нетворкинг - разделимся на группы, пообщаемся и заведем новые знакомства
15:50 – 16:30 – Игорь Панасюк (Senior в Яндекс) «Особенности и ловушки модели памяти в Go: тайны синхронизации»
16:30 – 17:10 – Леонид Ченский (TeamLead в OzonTech) «Пишем микросервисы на Go как в BigTech, с нуля»
17:10 – 17:30 – Перерыв на фуршет
17:30 – 18:10 – Сергей Венецкий (ex-разработчик в EPAM) «LLM под капотом: как правильно писать промпты»
18:10 – 18:50 – Владимир Балун (ex-TeamLead в Яндекс) «Как пройти System Design интервью: взгляд со стороны интервьювера и кандидата»
18:50 – 19:00 – Завершение контентной части, фотосесия
19:00 – 20:00 – Фуршет и нетворкинг на площадке
20:00 - Afterparty - по желанию едем в бар неподалеку и продолжаем общение в неформальной обстановке
🎁 Подарки за лучшие вопросы:
— книги по backend разработке от спикеров
— сертификаты на бесплатное обучение на любом из курсов школы
— бесплатные mock-собеседования от интервьюверов из BigTech
— скидки на обучение в нашей школе
Место: Пространство «Весна»
Спартаковский переулок 2с1, подъезд 7
5 минут от м. Красносельская
7 минут от м. Бауманская
Please open Telegram to view this post
VIEW IN TELEGRAM
mangle
https://github.com/google/mangle
Mangle is a programming language for deductive database programming. It is an extension of Datalog, with various extensions like aggregation, function calls and optional type-checking.
https://github.com/google/mangle
Announcing Genkit Go 1.0 and Enhanced AI-Assisted Development
https://developers.googleblog.com/en/announcing-genkit-go-10-and-enhanced-ai-assisted-development
We're excited to announce the release of Genkit Go 1.0, the first stable, production-ready release of Google’s open-source AI development framework for the Go ecosystem. Along with this release, we're also introducing the genkit init:ai-tools command to supercharge your AI-assisted development workflow.
Genkit is an open-source framework for building full-stack AI-powered applications. It provides a unified interface for multiple model providers and streamlined APIs for multimodal content, structured outputs, tool calling, retrieval-augmented generation (RAG), and agentic workflows. With Genkit Go, you can now build and deploy production-ready AI applications with the speed, safety, and reliability of Go.
https://developers.googleblog.com/en/announcing-genkit-go-10-and-enhanced-ai-assisted-development
what the go proxy has been doing
https://flak.tedunangst.com/post/what-the-go-proxy-has-been-doing
A follow up to what is the go proxy even doing? now with more answers. Russ Cox (rsc) and I traded a few emails trying to work out what was going on. They’re going to make a few changes, and I also learned a few things it would have been helpful to know.
https://flak.tedunangst.com/post/what-the-go-proxy-has-been-doing
Avoiding Common sync.WaitGroup Mistakes in Go
https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/
With the latest release of Go 1.25, there are two notable changes to the sync.WaitGroup type, both of which stem from common mistakes that developers make when using the WaitGroup type. In this post we are going to explore both of these changes and how they can help you avoid a common race condition.
https://www.calhoun.io/avoiding-common-sync-waitgroup-mistakes/