GoSuda

Co nowego w Go 1.24?

By Lemon Mint
views ...

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.

Przegląd Go 1.24