Go Update

Админ: @lepage_d
Similar Channels



Эволюция языка программирования 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

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
.— У тестов и бенчей появился свой контекст! Можно будет дропнуть кучу кода отвечающего за создание контекстов в тестах.
Полное описание (жирного) релиза вот тут.