GoSuda

Какво е новото в Go 1.24?

By Lemon Mint
views ...

Go 1.24 се очертава като значимо издание, въвеждащо редица подобрения, фокусирани върху производителността, сигурността и опита на разработчиците. Тези промени целят да направят Go още по-мощен и ефективен за изграждане на модерни приложения.

Увеличаване на производителността

Общо подобрение на производителността с 2-3% намаление на натоварването на процесора в набор от представителни бенчмаркове. Тези подобрения включват нова вградена имплементация на map, по-ефективно разпределение на паметта за малки обекти и нова имплементация на вътрешен за средата на изпълнение mutex. Резултатите може да варират в зависимост от приложението.

Постквантова криптография

Въвеждане на пакета crypto/mlkem, имплементиращ ML-KEM-768 и ML-KEM-1024. ML-KEM е постквантов механизъм за обмен на ключове, известен преди като Kyber и специфициран във FIPS 203. Това допълнение подготвя Go за бъдещето на криптографската сигурност.

Подобрение на TLS

Поддръжка на Encrypted Client Hello (ECH) в TLS. Тази функция може да бъде активирана чрез попълване на полето Config.EncryptedClientHelloKeys, подобрявайки поверителността и сигурността на TLS връзките.

Нова Swiss Table Map

Подобрена имплементация на map за по-добра производителност. Тази нова имплементация е базирана на Swiss Tables и може да бъде деактивирана с флага за компилация GOEXPERIMENT=noswissmap.

Актуализация на Sync Map

Подобрена производителност за модификации на map в sync.Map. Модификациите на несвързани набори от ключове са много по-малко вероятно да се конкурират при по-големи карти и вече няма нужда от време за разгръщане, за да се постигнат нискоконкурентни натоварвания от картата. Ако срещнете проблеми, можете да се върнете към старата имплементация, използвайки GOEXPERIMENT=nosynchashtriemap.

Подобрено JSON Marshaling

Нова опция за таг omitempty за по-интелигентно пропускане на полета на struct по време на JSON marshaling. При marshaling, поле на struct с опция omitempty ще бъде пропуснато, ако стойността му е нула. Ако типът на полето има метод IsZero() bool, той ще бъде използван, за да се определи дали стойността е нула.

Почистване на средата на изпълнение

Въвеждане на функцията AddCleanup за заместване на SetFinalizer за по-добро управление на ресурсите. За разлика от SetFinalizer, тя не възкресява обекта, към който е прикачена за финализиране, и множество почиствания могат да бъдат прикачени към един обект. Новият код трябва да предпочита AddCleanup пред SetFinalizer.

Директиви за инструменти в go.mod

Подобрено проследяване на изпълними зависимости с помощта на директиви за инструменти в go.mod. Това премахва необходимостта от предишното заобиколно решение за добавяне на инструменти като празни импорти в файл, традиционно наричан "tools.go".

Ограничен достъп до директории

Нов тип os.Root за контролирани файлови операции. Типът os.Root предоставя възможност за извършване на файлови операции в рамките на определена директория, предотвратявайки достъп извън указания път.

Подобрения в тестването

Нов пакет testing/synctest за тестване на паралелен код. Функцията synctest.Run стартира група от goroutines в изолиран „балон“, а функцията synctest.Wait изчаква всички goroutines в текущия балон да блокират. Този пакет е експериментален и трябва да бъде активиран чрез задаване на GOEXPERIMENT=synctest по време на компилация.

Кеш за компилация

Изпълнимите файлове на go run вече се кешират за по-бързо изпълнение. Това прави повторните изпълнения по-бързи за сметка на увеличаване на размера на кеша.

Cgo производителност

Нови анотации #cgo noescape и #cgo nocallback за по-добра Cgo производителност. #cgo noescape cFunctionName казва на компилатора, че паметта, предадена на C функцията, не излиза. #cgo nocallback cFunctionName казва на компилатора, че C функцията не извиква обратно никакви Go функции.

Слаби указатели

Поддръжка на слаби указатели за безопасно рефериране на памет, без да се предотвратява освобождаването ѝ. Слабите указатели са примитив от ниско ниво, предоставен за създаване на ефективни структури за памет, като слаби карти за асоцииране на стойности, карти за канонизация и различни видове кешове.

Подобрение на бенчмарка

Нов метод testing.B.Loop за по-бързи и по-малко склонни към грешки бенчмаркове. Функцията за бенчмарк ще се изпълни точно веднъж на -count, така че скъпите стъпки за настройка и почистване се изпълняват само веднъж. Параметрите и резултатите от извикванията на функции се запазват живи, предотвратявайки пълната оптимизация на тялото на цикъла от компилатора.

Go 1.24 се очертава като значимо издание, предлагащо съществени подобрения в различни аспекти на езика и неговата екосистема.

Overview of Go 1.24