После большого взрыва Go 1.18, Go все еще продолжает развивать новые функции. Если вы пропустили то, что появилось в версии 1.18, ознакомьтесь с моим предыдущим кратким руководством. На данный момент уже выпущен RC1, а версия будет выпущена в августе 2022 года. Давайте посмотрим, что появится в Go 1.19.
Атомарные типы
Bool
, Int32
, Int64
, Uint32
, Uint64
, Uintptr
и Pointer
— новые атомарные типы в пакете sync/atomic
. Если вы не знакомы, мы можем кратко описать пакет atomic, который
предоставляет низкоуровневые примитивы атомарной памяти, полезные для реализации алгоритмов синхронизации*.
С этими новыми типами мы можем использовать функции Load
, Store
, Swap
, CompareAndSwap
. ФункцияAdd также может быть использована для числовых типов. Эти функции упрощают код, который мы писали до Go 1.19, и вы можете проверить этот новый код на Go Playground.
Мягкое ограничение памяти
Как вы, возможно, знаете, когда дело доходит до настройки памяти в Go, у вас есть только один вариант — установить GOGC(runtime/debug.SetGCPercent)
. Хотя эта оптимизация в основном дает компромисс между процессором и памятью, она не уважает лимит памяти пользователей**.
Как описано в предложении, мы могли бы определить мягкий лимит памяти с помощью переменной окружения GOMEMLIMIT
или функции runtime/debug.SetMemoryLimitfunction
.
С помощью этой новой функции мы можем уменьшить лимиты памяти и определить лучшее использование памяти. Возможно, пришло время оставить в прошлом обходной путь с балластом памяти, который дала нам команда twitch🙏.
Новые функции
Go 1.19 имеет несколько изменений в основных библиотеках. Когда я проверил их, я выбрал некоторые из них, которые показались мне значительными.
- Алгоритмы сортировки переключились на квиксорт, уничтожающий шаблоны, для более быстрых результатов в нескольких сценариях.
- Новая функция
JoinPath
(методURL.JoinPath
) создает новый URL путем объединения списка элементов пути.
Ограничение сборки Unix
unix
— это новое ограничение сборки, которое выполняется, если GOOS
имеет одно из следующих значений
ios, linux, android, darwin, dragonfly, freebsd, hurd, illumos, netbsd, aix, openbsd или solaris.
Компилятор
Компилятор теперь использует таблицу переходов для реализации операторов переключения больших целых чисел и строк. Улучшение производительности оператора switch варьируется, но может составлять порядка 20%. (Только GOARCH=amd64
и GOARCH=arm64
)***.
Подробности можно узнать в этом бенчмарке.
В версии 1.19 сообщество хорошо поработало и позаботилось о нескольких оптимизациях производительности. Многие улучшения и исправления также будут в этой версии. Эти функции — моя подборка. Если я упустил какие-либо интересные функции, пожалуйста, свяжитесь со мной.
Если вы хотите присоединиться к нашим сусликам, вы можете подать заявку на наши открытые вакансии.