Co nowego w Go 1.24?
Go 1.24 zapowiada się na znaczące wydanie, wprowadzające szereg ulepszeń skupionych na wydajności, bezpieczeństwie i doświadczeniu deweloperów. Zmiany te mają na celu uczynienie Go jeszcze potężniejszym i wydajniejszym w tworzeniu nowoczesnych aplikacji.
Zwiększenie Wydajności
Ogólna poprawa wydajności z redukcją narzutu CPU o 2-3% w zestawie reprezentatywnych benchmarków. Ulepszenia te obejmują nową wbudowaną implementację map, bardziej efektywną alokację pamięci dla małych obiektów oraz nową wewnętrzną implementację muteksu w środowisku uruchomieniowym. Wyniki mogą się różnić w zależności od aplikacji.
Krypto Postkwantowe
Wprowadzenie pakietu crypto/mlkem
, implementującego ML-KEM-768 i ML-KEM-1024. ML-KEM to postkwantowy mechanizm wymiany kluczy, wcześniej znany jako Kyber i specyfikowany w FIPS 203. To dodatek przygotowuje Go na przyszłość bezpieczeństwa kryptograficznego.
Ulepszenie TLS
Obsługa Encrypted Client Hello (ECH) w TLS. Funkcję tę można włączyć poprzez wypełnienie pola Config.EncryptedClientHelloKeys
, co zwiększa prywatność i bezpieczeństwo połączeń TLS.
Nowa Mapa Swiss Table
Ulepszona implementacja map dla lepszej wydajności. Ta nowa implementacja bazuje na Swiss Tables i może zostać wyłączona za pomocą flagi kompilacji GOEXPERIMENT=noswissmap
.
Aktualizacja Sync Map
Poprawiona wydajność dla modyfikacji map w sync.Map
. Modyfikacje rozłącznych zbiorów kluczy są znacznie mniej podatne na rywalizację na większych mapach, a także nie jest już wymagany czas rozruchu, aby osiągnąć niską rywalizację z mapy. W przypadku napotkania problemów można powrócić do starej implementacji za pomocą GOEXPERIMENT=nosynchashtriemap
.
Ulepszone Marshaling JSON
Nowa opcja tagu omitempty
dla inteligentniejszego pomijania pól struktury podczas marshalingu JSON. Podczas marshalingu, pole struktury z opcją omitempty
zostanie pominięte, jeśli jego wartość jest zerowa. Jeśli typ pola posiada metodę IsZero() bool
, zostanie ona użyta do określenia, czy wartość jest zerowa.
Czyszczenie Środowiska Uruchomieniowego
Wprowadzenie funkcji AddCleanup
w celu zastąpienia SetFinalizer
dla lepszego zarządzania zasobami. W przeciwieństwie do SetFinalizer
, nie przywraca ona obiektu, do którego jest przypisana w celu finalizacji, a wiele operacji czyszczenia może być przypisanych do jednego obiektu. Nowy kod powinien preferować AddCleanup
nad SetFinalizer
.
Dyrektywy Narzędzi w go.mod
Ulepszone śledzenie zależności wykonywalnych za pomocą dyrektyw narzędzi w go.mod
. Eliminuje to potrzebę wcześniejszego obejścia polegającego na dodawaniu narzędzi jako pustych importów do pliku nazwanego konwencjonalnie „tools.go”.
Dostęp Ograniczony do Katalogu
Nowy typ os.Root
dla kontrolowanych operacji na systemie plików. Typ os.Root
umożliwia wykonywanie operacji na systemie plików w określonym katalogu, zapobiegając dostępowi poza określoną ścieżką.
Ulepszenia Testowania
Nowy pakiet testing/synctest
do testowania kodu współbieżnego. Funkcja synctest.Run
uruchamia grupę goroutines w izolowanej „bańce”, a funkcja synctest.Wait
czeka na zablokowanie wszystkich goroutines w bieżącej bańce. Ten pakiet jest eksperymentalny i musi być włączony poprzez ustawienie GOEXPERIMENT=synctest
w czasie kompilacji.
Bufor Kompilacji
Pliki wykonywalne go run
są teraz buforowane w celu szybszego wykonania. Dzięki temu powtarzane wykonania są szybsze kosztem większego bufora.
Wydajność Cgo
Nowe adnotacje #cgo noescape
i #cgo nocallback
dla lepszej wydajności Cgo. #cgo noescape cFunctionName
informuje kompilator, że pamięć przekazana do funkcji C nie ucieka. #cgo nocallback cFunctionName
informuje kompilator, że funkcja C nie wywołuje żadnych funkcji Go.
Wskaźniki Słabe
Obsługa wskaźników słabych do bezpiecznego odwoływania się do pamięci bez zapobiegania jej odzyskaniu. Wskaźniki słabe to nisko-poziomowa prymitywna funkcja, która umożliwia tworzenie efektywnych pamięciowo struktur, takich jak słabe mapy do kojarzenia wartości, mapy kanoniczne oraz różnego rodzaju pamięci podręczne.
Ulepszenie Benchmarków
Nowa metoda testing.B.Loop
dla szybszych, mniej podatnych na błędy benchmarków. Funkcja benchmarku zostanie wykonana dokładnie raz na -count
, więc kosztowne kroki konfiguracji i czyszczenia zostaną wykonane tylko raz. Parametry i wyniki wywołań funkcji są utrzymywane, zapobiegając pełnej optymalizacji ciała pętli przez kompilator.
Go 1.24 zapowiada się na znaczące wydanie, oferując istotne ulepszenia w różnych aspektach języka i jego ekosystemu.