Golang Дайджест
7.76K subscribers
36 photos
1 file
165 links
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

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

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

Обратная связь: @justskiv
Download Telegram
Golang Дайджест
Анонимная сеть в 200 строк кода на Go https://habr.com/ru/articles/745256/ Отличный пост для тех, кто хочет немного погрузиться в понятие анонимных сетей и не тратить на это много времени. Всё как мы любим: краткий и интересный ликбез по теме, затем практика…
Анонимная сеть в 100 строк кода на Go

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

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

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

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

#article #dyi #сети
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Codebase Refactoring (with help from Go)

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

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

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

#рефакторинг #russ_cox
Please open Telegram to view this post
VIEW IN TELEGRAM
Корутины: stackful vs stackless

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

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

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

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

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

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

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

————

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

#article
Please open Telegram to view this post
VIEW IN TELEGRAM
GO Scheduler: теперь не кооперативный?

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

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

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

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

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

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

————

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

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

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

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

Читается при этом интересно, приятно. Очень крутая работа, рекомендую
Please open Telegram to view this post
VIEW IN TELEGRAM
GoLang исполнилось 15 лет 🍾

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

А в этом посте авторы рассказывают, как он похорошел за последние 5 лет.
Please open Telegram to view this post
VIEW IN TELEGRAM
Golang Conf 2024

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

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

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

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

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

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

#партнерский_пост, но рекомендация честная
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Go Update
🔥 weak: new package providing weak pointers 🔥

Соскучались по интересным изменениям? Их есть у меня!

Начиная с Go 1.24 у нас появится пакет который даст там т.н. "слабые указатели". Суть этих указателей заключается в том, что сборщик мусора вправе в любой момент времени собрать данные на которые они указывают. Т.е. сделать их указатели невалидными.

Простой пример кода:

weakPtr := weak.Make(&SomeStruct{someData})
runtime.GC()
println(weakPtr.Pointer() == nil) // может быть true, а может и false


На самом деле эти указатели появились еще с приходом пакета unique о котором я писал ранее. Но затащить два пакета в рамках одного proposal'а нельзя, поэтому пришлось ждать Go 1.24. Go Core Team (и в особенности Расс Кокс) очень долго сопротивлялись добавлению этого вида указателей в язык, т.н. они ломают абстракцию со сборщиком мусора и имеют очень неочевидные механики взаимодействия с finalizers. Однако после добавление пакета unique отрицать необходимость (хоть и редкую) такой вещи стало невозможно, поэтому было принято решение дать ее использовать всем.

Основной плюс этого пакета в том, что разработчикам кешей стало намного легче собирать мусор. Даже человек, который слабо помнит алгоритмы, теперь может реализовать LRU кеши элементарно на мапах. Как именно? А вот это я покажу в сообщении о следующем за этим изменении.
Как писать качественные unit-тесты

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

Немного про unit-тесты и как их прокачать: что такое мутационные тесты и зачем они нужны, что такое стабы и моки, в чем опасность использования моков и др.

Если вы уже умеете писать unit-тесты, но дальнейшие шаги пока не делали, статья вам будет полезна.
Please open Telegram to view this post
VIEW IN TELEGRAM
Автоматизация напоминаний клиентам

https://habr.com/ru/companies/exolve/articles/861346/

Туториал по созданию системы автоматических напоминаний. Как обучающий материал, вполне неплохо.
Но для более серьёзного использования выглядит плохо. Ниже я объясняю почему, плюс подписчик в комментах добавил ещё замечаний, за что ему отдельная благодарность.

В чём суть: клиент соглашается на что-то во время разговора, и через месяц автоматически получает SMS-напоминание.

Технически это реализовано через связку звонка и транскрибации (Exolve API), анализа текста, планирования и отправки SMS. Всё на Go + SQLite.

————

Теперь позволю себе немного покритиковать текст:

1) При поиске согласия не учитывается контекст: просто ищутся слова "да", "согласен", "конечно" где угодно в тексте. Но диалог может быть таким:

- Вам интересно?
- Да, но сейчас не готов
Или:
- Раньше было да, а сейчас нет

И система посчитает это за согласие

2) Отправка SMS планируется в памяти, с помощью time.AfterFunc: если сервис перезапустится, все запланированные сообщения пропадут.
Нужно хранить задачи на отправку (не только общую инфу) в базе и использовать какой-то планировщик.

3) Отсутствие учёта часовых поясов: SMS отправляются ровно через месяц без учёта времени клиента. Можно разбудить человека в 3 часа ночи.

Также стоило бы написать пару слов по поводу аутентификации веб-хука.

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

#automation #sqlite
Go 1.23: Interactive release notes

https://antonz.org/go-1-23/

Ещё немного про v1.23. Недавно мне скинули вот такую крутую страничку, где про новведения не только можно почитать, но и потыкать не отходя от кассы. Очень удобно.
Ну и текст написан хорошо.

Лучи добра и уважения автору ❤️

#go_1_23
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Golang Дайджест
Please open Telegram to view this post
VIEW IN TELEGRAM
Сколько памяти нужно в 2024 году для выполнения миллиона конкурентных задач?

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

Забавное исследование, но комментировать я его, пожалуй, не буду 🌚
Please open Telegram to view this post
VIEW IN TELEGRAM