RSS Telegram YouTube Apple Яндекс Spotify Amazon Почта

89. Go 1.24

16.02.2025

Скачать

К списку выпусков

Ссылки выпуска:

Вышла новая версия Go 1.24.0 и если кратко, то изменений не так много. Предлагаю консервативно подождать месяц и апаться, но я локально установил новую версию и уже ею пользуюсь. Что появилось самого полезного в новой версии?

Были внесены незначительные дополнения в спецификацию языка: теперь можно создавать type aliases у generic типов. Я вобще не использую тайп алиасы в своих проектах, поэтому, думаю, изменение нужно лишь для консистентности языка.

Общее повышение производительности 2-3% за счет улучшенной malloc маленьких объектов, новой имплементации mutex'а, который используется для внутренних задач в рантайме и улучшенных хеш-таблиц.

build, install и test команды теперь могут возвращать результаты в JSON формате.

go tool

Вы используете линтеры? или любой другой тулинг, например, для кодогенерации? Теперь можно сделать go get -tool и зависимость будет прописана в go.mod проекта. go tool <command> запустит установленную команду. Внимание! При установке зависимостей указывайте точную версию инструмента.

Например, golangci-lint - компиляция линтеров под одним зонтиком - ставится следующей командой:

go get -tool github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.5

Теперь запуск линтера делаем так:

go tool golangci-lint run

Если нужная версия линтера не установлена, то она будет установлена и запущена. В следующих эпизодах поговорим про этот инструмент.

omitzero

omitzero можно будет использовать вместо omitempty. При этом omitzero работает корректно для неинициализированного типа time.Time.

Swiss table

По-видимому это будет дополнительный популярный вопрос на интервью. Бесплатное ускорение работы с хеш-таблицами. Алгоритм портирован из популярной библиотеки Abseil от Google для разработчиков на C++. Бенчмарки показывают ускорение до 30% на хеш-таблицах размером более 1024 записей.

HTTP протоколы

В настройках транспорта клиента или сервера можно указывать версию HTTP-протокола: SetHTTP1(true) или SetHTTP2(true).

Обновления в пакете crypto

Можно не упомнить про пакет crypto. Будьте уверены, он будет обновляться почти во всех новых версиях, т.к.

weak pointers (слабые указатели)

В SDK появился пакет weak для создания слабых указателей, которые будут обнулены, а объекты, на которые они указывают будут удалены как только запустится GC. Подобные указатели есть в других ЯП, например, в C#.

В ЯП с GC управление памятью происходит скрытно от программистов, для компенсации этого придумываются разные полумеры вроде weak-указателей. В определенных алгоритмах такие указатели могут быть полезными, например при навигации по гигантскому дереву или для LRU-кеша.

Любой weak указатель может стать обычным и наоборот.