Golang Дайджест @golang_digest Channel on Telegram

Golang Дайджест

@golang_digest


Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

Посты публикуются не часто - только самое важное, с чем я лично ознакомился.

Поэтому можно не мьютить канал =)

Обратная связь: @justskiv

Golang Дайджест (Russian)

Присоединяйтесь к каналу "Golang Дайджест" для получения самой актуальной информации из мира Go. Здесь вы найдете новости, статьи, проекты, сервисы и изменения в языке Go, отобранные лично администратором канала. Посты публикуются не часто, но только самое важное, что гарантирует вам только качественный контент.

Не нужно беспокоиться о множестве сообщений, канал не засоряется информацией, а предлагает только лучшее. Так что не стесняйтесь подписываться, ведь здесь вы найдете самое интересное из мира Go.

Если у вас есть вопросы, предложения или хотите оставить отзыв, всегда можете написать администратору канала по контакту @justskiv. Приходите и окунитесь в увлекательный мир Go вместе с нами!

Golang Дайджест

21 Nov, 07:26


Golang Conf 2024

Наверняка многие и так знают, но на всякий случай напоминаю — скоро будет HighLoad++ и в рамках него также Golang Conf 2024.

Когда: 2 и 3 декабря

Я смотрю HL++ практически всегда, без пропусков. И особенно люблю, когда в рамках него проводится ещё и крутая конференция по Go — ещё больше интересных докладов, и не надо их искать среди всех других.
А в этот раз у GoLang Conf будет целых два зала и отдельная секция Хардкор (ассемблер, внутренности, декомпиляция и т.п. Этой секции я особенно рад)
Также будут обсуждаться нововведения в Go v1.23.

Из особенно примечательного лично для меня:

- Секреты высокой производительности в многоядерных системах, Никита Галушко
- Конкурентность в Go: от железа к коду, Максим Горозий
- Ну и, конечно, на котиков Олега посмотрю обязательно

Программу, расписание и онлайн-билеты можно найти на сайте.

#партнерский_пост, но рекомендация честная

Golang Дайджест

12 Nov, 07:26


GoLang исполнилось 15 лет 🍾

https://go.dev/blog/15years

А в этом посте авторы рассказывают, как он похорошел за последние 5 лет.

Golang Дайджест

11 Nov, 12:16


Погружение в интерфейсы Go

https://habr.com/ru/articles/856272/

Отличная комплексная статья по интерфейсам. Автор прошелся практически по всем аспектам, которые касаются темы:

- Что такое интерфейс
- Какая у него внутренняя структура
- Какие связанные вопросы могут задать на собеседованиях
- Пустой интерфейс
- Type Assertion
- Встраивание интерфейсов
- Где лучше размещать интерфейсы ❤️
И другое

Читается при этом интересно, приятно. Очень крутая работа, рекомендую

Golang Дайджест

10 Nov, 11:26


Ranging over functions in Go 1.23

https://eli.thegreenplace.net/2024/ranging-over-functions-in-go-123/

Ещё один неплохой пост про range по функциям, который ввели в Go v1.23: что это и как пользоваться.

#go_1_23

Golang Дайджест

27 Oct, 18:06


GO Scheduler: теперь не кооперативный?

https://habr.com/ru/articles/502506/

Да, это довольно старая статья, которая описывает изменения в работе планировщика Go в версии 1.14, которые касались вытеснения горутин.

Статья довольно сложная, но полезная. Поможет лучше осознать, что же там такого интересно произошло в 1.14

Если очень кратко:

Раньше горутину могла прервать только она сама, снаружи можно было лишь поставить флаг о желании её прервать, но проверяла его она сама. Из-за довольно легко можно было написать код, из-за которого горутина никогда не будет вытеснена, а это может привести к дедлоку программы.

В версии же 1.14 появился механизм, который позволяет прерывать такие вот жадные горутины с помощью сигнала SIGURG. Теперь если горутина работает более 10мс, планировщик может легко её прервать.

————

Но в статье это разобрано НАМНОГО подробней, мягко говоря. Настолько хорошего разбора я пока нигде не встречал.

Golang Дайджест

21 Oct, 14:57


Функциональные опции в Go

https://habr.com/ru/articles/842594/

🤓 Я как-то писал в своём основном канале про паттерн Functional Options — этот подход мне нравится, и я часто его вижу. А если он вам даже и не нравится, то познакомится всё равно стоит, т.к. встречать вы его наверняка тоже будете часто.

Если же хочется погрузиться глубже, то вот вам свежая подробная статья на Хабре на эту тему (не моя!). Написано очень хорошо, мне понравилось — читается легко и приятно.

————

Предвосхищая ваши комментарии, про Configurable Object я тоже писал 🤓

#article

Golang Дайджест

20 Oct, 12:46


Корутины: stackful vs stackless

https://habr.com/ru/articles/850970/

Статья не совсем по Go, она более общая (хотя, Go там тоже упоминается). Но тем лучше — чтобы лучше понимать, как что-то устроено в твоём языке, очень полезно поглядеть, как это сделано у соседей и сравнить.

Статья довольно короткая и написано очень хорошо, понятно, как я люблю.

#article

Golang Дайджест

18 Oct, 15:38


Codebase Refactoring (with help from Go)

https://go.dev/talks/2016/refactor.article

Читая предыдущую статью, наткнулся на очень интересную работу Расса Кокса про рефакторинг кода на Go. Странно, что я не видел её раньше, большое упущение 😩

Статья хорошая, полезная. Вообще, её стоило бы прочитать перед рассказом про алиасы.

#рефакторинг #russ_cox

Golang Дайджест

18 Oct, 08:32


What's in an (Alias) Name?

https://go.dev/blog/alias-names

В версии Go 1.24, которая запланирована на начало февраля 2025 года, появится возможность объявлять generic alias type (пока можете почитать proposal).
В этой статье авторы Go объясняют что это и зачем. Заодно тут есть небольшой ликбез по обычному alias type.

Как обычно, буду честен — на мой взгляд, эта фича вряд ли пригодится многим из вас. Автор статьи позиционирует её как средство для рефакторинга пакетов, в которых есть дженерики — а много у вас таких пакетов? 🙃

Но, в любом случае, потратить 10-15 минут своего времени на ознакомление с новой фичей своего инструмента считаю полезным занятием. Тем более, когда сами авторы стараются и пишут для нас подобные разборы.

————

В комментариях было бы особенно интересно увидеть людей, которые эту фичу очень ждут. Расскажите, почему?

#go_official #go_1_23

Golang Дайджест

14 Oct, 12:49


Анонимная сеть в 100 строк кода на Go

https://habr.com/ru/articles/849552/

Хорошее продолжение хорошей статьи. Суть новой статьи автор сам неплохо подытожил в самом начале:

Прошло уже более года с тех пор как я написал статью - Анонимная сеть в 200 строк кода на Go. Пересмотрев её однажды осенним вечером я понял насколько всё в ней было ужасно - начиная с самого поведения логики кода и заканчивая его избыточностью. Сев за ноутбук и потратив от силы 20 минут у меня получилось написать сеть всего в 100 строк кода, используя лишь и только стандартную библиотеку языка.

Мне понравилось ❤️

#article #dyi #сети

Golang Дайджест

11 Oct, 08:52


Мысли про найм Go-разработчиков в 2024 году

https://habr.com/ru/articles/846962/

Честно, статья мне не очень понравилась, слишком сумбурно и очень много субъективных мыслей. И главное — не очень понятна основная мыль, которую пытался донести автор.

Но почитать все равно было интересно, ведь на собеседованиях я сейчас бываю довольно редко, и стало интересно что там сейчас происходит на рынке (спойлер — ровно то же самое, что и лет 5 назад).

В любом случае, автору статьи спасибо за то, что поделился своими мыслями ❤️

А вот дискуссии в комментариях читать оказалось даже интересней, чем саму статью.

————

С удивлением обнаружил, что автор этой статьи также является автором довольно неплохого сайта-тренажера для решения задач по программированию - Code Abbey. Да, на первый взгляд он выглядит неказисто, но задачки довольно неплохие, и подход интересный. Со мной им когда-то давно поделился Глеб Яльчик — на его взгляд, это один из лучших тренажеров для новичков. Не буду тут подробно объяснять почему — если интересно, спросите в комментариях, обсудим.

Расскажите также в комментариях про свой опыт собеседований по Go в последнее время, только не забывайте уточнять грейд.

Golang Дайджест

08 Oct, 20:22


Go memory ballast: How I learnt to stop worrying and love the heap

https://blog.twitch.tv/en/2019/04/10/go-memory-ballast-how-i-learnt-to-stop-worrying-and-love-the-heap/

Очень крутая статья, в которой разработчики Twitch снова борются с Garbage Collector'ом (GC). В статье есть очень крутой ликбез по GC, про некоторые его основы и нюансы.

И всё это закрепляется крутым реальным примером оптимизации, которую можно осознать благодаря понимаю этих самых тонкостей.

Будем честны, далеко не всем это пригодится в реальной работе, т.к. реальная польза будет заметна лишь при большом хайлоаде, но расширять кругозор полезно (а не расширять вредно).
Кроме того, статья поможет разобраться не столько в хайлоаде, сколько во внутреннем устройстве GC, а то ещё более ценно.

Статья написана очень круто — материал довольно сложный, глубокий, но при этом читается довольно легко и интересно.

————

Краткая суть проблемы из статьи: периодически Твич ловит внезапный рост нагрузки. Например, из-за так называемого refresh storm — это когда крупный стример перезапускает стрим, и все его зрители начинают массово обновлять страницу.

Масштабировать такое сложно, т.к. всё происходит слишком быстро, а держать достаточное количество мощностей, работающих постоянно — дорого.

Ребята решили оптимизировать нагрузку на процессор тем, что снизили частоту срабатывания GC. Как именно? Если кратко, то вот так:

func main() {

// Create a large heap allocation of 10 GiB
ballast := make([]byte, 10<<30)

// Application execution continues
// ...
}


Подробное обоснование, объяснение и результаты найдёте в статье 🙃

Ну ладно, спойлер, вот результаты: снижение количества срабатываний GC на 99% и снижение нагрузки на CPU на 30%

Вообще, всё это выглядит как грязный хак и костыли, но авторы уже завели proposal, в котором предлагают ввести флаг, позволяющий решить данную проблему легально.

#article #english #highload #garbage_collector

Golang Дайджест

29 Aug, 05:12


unique - новый пакет в стандартной библиотеке Go 1.23

https://go.dev/blog/unique

Ещё один интересный пост в официальном блоге авторов Go с подробным объяснением очередной интересной новинки в версии 1.23

Пакет unique упрощает работу с дубликатами. То есть, он позволяет выполнять дедупликацию таким хитрым образом, чтобы все ссылки указывали на единственную, уникальную копию. При этом пакет эффективно управляет этими копиями под капотом.

Возможно, вы уже встречали этот подход под названием Interning.

Автор статьи рассказывает и показывает, как это работает, и почему это полезно.

#go_official #go_1_23

Golang Дайджест

28 Aug, 19:46


Паттерн Functional Options

Это очень популярный подход, который я встречал во всех компаниях, в которых довелось писать код на Go.

В этом посте я подробно описал суть проблемы, которую он решает. А в этом разобрал суть паттерна и его реализацию.

#pattern #guide

Golang Дайджест

24 Aug, 10:09


Range Over Function Types

https://go.dev/blog/range-functions

Подробный пост в официальном блоге разработчиков Go о том, зачем добавили итераторы в Go 1.23, что они из себя представляют, как их использовать, приводят примеры.

#go_official #go_1_23

Golang Дайджест

14 Aug, 10:44


Тут тоже интересно рассказано про новое в 1.23, вдруг кому-то больше понравится в таком формате.

Golang Дайджест

14 Aug, 10:44


Go 1.23

Тут вышел Go 1.23, ну а мы с вами успели разобрать основные изменения заранее:

— Итераторы
— Таймеры
— Уникальные значения
— Скопировать каталог
— Куки

Все вместе с интерактивными примерами:
https://antonz.org/go-1-23