Go Update @go_update Channel on Telegram

Go Update

Go Update
Канал про новости связанные с языком программирования Go. Эволюция языка, стандартной библиотеки и просто интересные вещи над которыми работает Go Core Team и не только.

Админ: @lepage_d
2,595 Subscribers
3 Photos
51 Videos
Last Updated 11.03.2025 06:48

Эволюция языка программирования Go: от создания до современности

Язык программирования Go, также известный как Golang, был разработан в 2007 году в компании Google, и с тех пор претерпел значительные изменения и эволюцию. Его создание стало ответом на необходимость в более простом, эффективном и надежном инструменте для разработки серверных приложений. Go объединил в себе лучшие черты таких языков, как C, C++ и Python, что сделало его популярным выбором среди разработчиков. Благодаря своей лаконичности, высокой производительности и встроенной поддержке параллелизма Go быстро завоевал популярность как в академической среде, так и в индустрии. В этом контексте стоит рассмотреть, какие изменения произошли в языке за годы его существования, как развивалась стандартная библиотека и какие интересные проекты воплощает команда Go Core Team.

Что такое язык программирования Go?

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

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

Как эволюционировал язык Go с момента своего создания?

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

Совсем недавно, в версии Go 1.18, разработчики добавили поддержку обобщений, что значительно упростило написание универсального кода и повысило его гибкость. Эти изменения постоянно делают Go более привлекательным для разработчиков и поддерживают его актуальность на современном рынке.

В чем особенности стандартной библиотеки Go?

Стандартная библиотека языка Go примечательна своим богатым функционалом, позволяющим разработчикам эффективно справляться с задачами, связанными с вводом-выводом, сетевыми соединениями и обработкой строк. Библиотека включает в себя пакеты для работы с HTTP, JSON, криптографией и многим другим, что обеспечивает высокую производительность и удобство.

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

Какие проекты разрабатывает Go Core Team?

Go Core Team активно работает над улучшением языка и его окружения. Один из наиболее заметных проектов – усовершенствование компилятора, с целью повышения производительности и уменьшения времени компиляции. Также команда разрабатывает новые инструменты для разработчиков, такие как Go Modules, которые облегчают управление зависимостями в проектах.

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

Как Go используется в различных областях программирования?

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

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

Go Update Telegram Channel

Добро пожаловать на канал "Go Update"! Здесь вы найдете все свежие новости, связанные с языком программирования Go. Мы следим за эволюцией языка, стандартной библиотеки и делимся интересными фактами и разработками, над которыми работает Go Core Team и не только. Если вы хотите быть в курсе всех изменений и улучшений в мире Go, то этот канал идеально подойдет для вас. Наш администратор @lepage_d всегда готов ответить на ваши вопросы и обсудить последние обновления. Присоединяйтесь к нам и станьте частью сообщества Go Update уже сегодня!

Go Update Latest Posts

Post image

Немного юмора.

17 Feb, 06:04
2,639
Post image

🎉 Вышел Go 1.24! 🎉

Этот момент настал!

Ключевые нововведения:
— Дженерики теперь умеют в псевдонимы (aliases) т.е. теперь можно писать так


type MyType[T any] = myType[T,*T]


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

— Теперь можно отслеживать версии и использовать утилиты прямо с помощью команды go tool. Краткий смысл сего: оно помещает все зависимости добавляемой тулзы в require блок, а саму утилиту в блок tool. Учтите, что если вы не указываете отдельный go.mod файл с помощью флага -modfile (его принимают большинство команд) то зависимости внешней тулзы перемешаются с вашими. Однако есть и хорошая новость — из-за умного механизма «вычистки» MVS если кто то импортирует ваш модуль, то зависимости которые нужны для утилит к нему не попадут.

go test теперь гоняет go vet с небольшим числом анализаторов перед запуском тестов для поиска распространенных ошибок (в том числе ошибок в оформлении тестов). go vet тоже подтянули, теперь, например, ругается на printf функции где аргумент только строка.

— Бинари запущенные с помощью go run и go tool теперь кешируются внутри внутри билд кэша. Никаких больше пересборок на каждом go run.

go build и go install научили в json вывод.

— С помощью новой переменной окружения GOAUTH можно определить принцип для авторизации на приватных серверах модулей. Подробности с помощью go help goauth

go build теперь вставляет в бинарь информацию о версии (наконец-то можно перестать делать это вручную!) с использованием тега и/или хеша коммита вашего гита (или mercurial и прочая).

— Новая реализация map на основе Swiss Tables. Бигтехи ваши вопросы на собесах больше неактуальны 🤡.

— Инлайнинг стал мощнее. Теперь, с большей вероятностью, тело функции которую вы передаете как аргумент будет вставлено в место ее вызова. Делали в основном для итераторов которые уступали по скорости циклам. Вместе с прошлым изменением и прочими изменениями в рантайме дало совокупный буст в 3-5% по производительности.

— Различные улучшения CGO с помощью новых директив.

— Новый способ гонять бенчи for b.Loop() { ... }. Основной плюс (кроме того, что меньше писать) в том, что гонялке бенчмарков больше не нужно вызывать вашу функцию несколько раз, ибо сама найдет нужные параметры во время цикла. А значит дорогие блоки инициализации и удаления по итогу бенча стали дешевле.

— С помощью переменной окружения GOCACHEPROG можно настроить свое утилиту которое будет отвечать за кеширование, вместо стандартного «все на диск в папочку». Пригодиться тем, у кого распределенные билды или много чего собирается в докере. Документация.

— Пакет со слабыми указателями стал доступен всем.

— Подъехала замена финалайзерам. С типобезопастностью и сигнатурой которая намекает как делать правильно (и длинной докой объясняющей все сценарии). А еще их можно повесить сколько угодно в отличии от финалайзеров. Почему это важно я писал ранее.

— Пакет testing/synctest который в будущем позволит нам полностью дропнуть все моки времени. Пока обещают изменения API поэтому скрыто за флагом GOEXPERIMENT=synctest

— Появился OpenRoot. TLDR: открыв каталог таким образом из него нельзя убежать используя симлинки и прочая. Штука интересная для тех у кого пути до файлов генерируются извне.

— Куча прочих улучшений, включая новый функции для итераторов в пакеты bytes и strings.

— У тестов и бенчей появился свой контекст! Можно будет дропнуть кучу кода отвечающего за создание контекстов в тестах.

Полное описание (жирного) релиза вот тут.

11 Feb, 21:37
8,214
Post image

0️⃣ Omitzero или убираем пустые значения при серилизации в json

Я уверен, что большинство в курсе о том, что пакет json поддерживает структурный тег omitempty. На данный момент это единственный прямолинейный способ указать, что поле не следует выводить в json если оно содержит нулевое значение. Однако у этого тега есть два минуса:

1. Он плохо работает со структурами.
2. Он неумеет в переопределение принципа по которому определяется сам факт нулевого значения.

Оба пункта довольно долго портили кровь разработчикам сложных вложенных API и заставляли их пользоваться указателями, там, где можно было обойтись без них. И вот Go Team приняла волевое решение и реализовала новый тег. Встречаем omitzero. Принцип работы прост до невозможности:

1. Если поле это структура и она пустая, то маршалить ее он не будет.
2. Если у типа поля определен метод IsZero и он вернул true то и его маршалить не будут.

КМК именно это можно было привезти еще в версии Go 1.10, т.к. фиче не нужны новые языковые фишки, а необходимость ее была видна еще с Go 1.1. Чтож, лучше поздно чем никогда.

11 Feb, 07:55
2,502
Post image

Про нововведения в Go 1.24

Долго собирался написать серию (хотя бы один!) постов про вещи которые к нам подъедут в Go 1.24, но так никак и не смог собраться. А потом обнаружил, что один наш коллега уже все это сделал в подробном и, главное, интерактивным виде. Правда есть нюанс — сам пост на английском.

Однако тем кто не знает английского не стоить грустить — методом гуглежки было обнаружено, что от него же есть серия статей которая почти полностью дублирует записи в блоге. И оно в телеграмме! Поэтому смело идем и начинаем читать, что нас ждет в предстоящей версии.

П.С. Ну а я постараюсь в ближайшее время запилить обзор предложение от Яна Ланса Тейлора о новом синтаксисе обработки ошибок и как оно разделило сообщество почти поровну.

11 Feb, 07:31
2,076