Вышла новая версия Go 1.24.0 и если кратко, то изменений не так много. Предлагаю консервативно подождать месяц и апаться, но я локально установил новую версию и уже ею пользуюсь. Что появилось самого полезного в новой версии?
Были внесены незначительные дополнения в спецификацию языка: теперь можно создавать type aliases у generic типов. Я вобще не использую тайп алиасы в своих проектах, поэтому, думаю, изменение нужно лишь для консистентности языка.
Общее повышение производительности 2-3% за счет улучшенной malloc маленьких объектов, новой имплементации mutex'а, который используется для внутренних задач в рантайме и улучшенных хеш-таблиц.
build, install и test команды теперь могут возвращать результаты в JSON формате.
Вы используете линтеры? или любой другой тулинг, например, для кодогенерации? Теперь можно
сделать 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
можно будет использовать вместо omitempty
. При этом omitzero
работает корректно для неинициализированного типа time.Time
.
По-видимому это будет дополнительный популярный вопрос на интервью.
Бесплатное ускорение работы с хеш-таблицами. Алгоритм портирован из популярной библиотеки Abseil
от Google для разработчиков на C++. Бенчмарки показывают ускорение до 30% на хеш-таблицах размером более 1024
записей.
В настройках транспорта клиента или сервера можно указывать версию HTTP-протокола: SetHTTP1(true)
или SetHTTP2(true)
.
Можно не упомнить про пакет crypto. Будьте уверены, он будет обновляться почти во всех новых версиях, т.к.
В SDK появился пакет weak
для создания слабых указателей, которые будут обнулены, а объекты, на
которые они указывают будут удалены как только запустится GC. Подобные указатели есть в других ЯП, например, в
C#.
В ЯП с GC управление памятью происходит скрытно от программистов, для компенсации этого придумываются разные полумеры вроде weak-указателей. В определенных алгоритмах такие указатели могут быть полезными, например при навигации по гигантскому дереву или для LRU-кеша.
Любой weak указатель может стать обычным и наоборот.