{"id":121950,"date":"2025-02-15T14:22:29","date_gmt":"2025-02-15T12:22:29","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/go-1-24"},"modified":"2025-02-15T14:22:29","modified_gmt":"2025-02-15T12:22:29","slug":"go-1-24","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/news\/go-1-24","title":{"rendered":"Go 1.24","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><a rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/images\/21754\/original.png\" itemprop=\"contentURL\">            <img decoding=\"async\" alt=\"Go 1.24\" src=\"\/wp-content\/uploads\/2025\/02\/6d6299421d83951d055782658814425f.jpg\" style=\"display:block;margin: 0 auto;\" \/>                   <\/a>                       <noindex>      <noindex><\/p>\n<p>Nowa wersja j\u0119zyka Go, wersja 1.24, pojawia si\u0119 sze\u015b\u0107 miesi\u0119cy po <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. Wi\u0119kszo\u015b\u0107 zmian dotyczy realizacji narz\u0119dzi, czasu dzia\u0142ania i bibliotek. Jak zawsze, wydanie zapewnia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">obietnic\u0119 zgodno\u015bci<\/a> Go 1. Programi\u015bci tego j\u0119zyka spodziewaj\u0105 si\u0119, \u017ce prawie wszystkie programy Go b\u0119d\u0105 nadal kompilowane i dzia\u0142a\u0107 jak wcze\u015bniej.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>Zmiany w j\u0119zyku<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 teraz w pe\u0142ni wspiera <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">og\u00f3lne aliasy typ\u00f3w<\/a>: alias typu mo\u017ce by\u0107 parametryzowany jako typ zadeklarowany. Szczeg\u00f3\u0142y mo\u017cna znale\u017a\u0107 w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">specyfikacji j\u0119zyka<\/a>. Do tej pory mo\u017cliwo\u015b\u0107 ta mo\u017ce by\u0107 wy\u0142\u0105czona ustawieniem GOEXPERIMENT=noaliastypeparams; jednak opcja aliastypeparams zostanie usuni\u0119ta w Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>Narz\u0119dzia<\/h2>\n<h3>Komenda go<\/h3>\n<p> <noindex><\/p>\n<p>Modu\u0142y go mog\u0105 teraz \u015bledzi\u0107 zale\u017cno\u015bci wykonawcze korzystaj\u0105c z dyrektywy tool w go.mod. Eliminuje to potrzeb\u0119 wcze\u015bniejszego obej\u015bcia, kt\u00f3re polega\u0142o na dodawaniu narz\u0119dzi jako pustych import\u00f3w do pliku, zwykle nazywanego \u201etools.go\u201d. Komenda go tool mo\u017ce teraz uruchamia\u0107 te narz\u0119dzia, opr\u00f3cz narz\u0119dzi dostarczanych wraz z Go. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">dokumentacji<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Nowy flag -tool dla go get prowadzi do dodania dyrektywy narz\u0119dzia w bie\u017c\u0105cym module dla wskazanych pakiet\u00f3w, opr\u00f3cz dodawania dyrektyw wymaga\u0144.<\/p>\n<p> <noindex><\/p>\n<p>Nowy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">meta-wzorzec tool<\/a> odnosi si\u0119 do wszystkich narz\u0119dzi w bie\u017c\u0105cym module. Mo\u017ce to by\u0107 u\u017cyte do ich wszystkich aktualizacji poprzez go get tool lub do zainstalowania ich w swoim katalogu GOBIN za pomoc\u0105 go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pliki wykonywalne stworzone za pomoc\u0105 go run oraz nowe zachowanie go tool s\u0105 teraz przechowywane w pami\u0119ci podr\u0119cznej kompilacji Go. U\u0142atwia to powtarzaj\u0105ce si\u0119 uruchomienia dzi\u0119ki powi\u0119kszonej pami\u0119ci podr\u0119cznej. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Polecenia go build i go install teraz przyjmuj\u0105 flag -json, kt\u00f3ra raportuje wyniki i b\u0142\u0119dy kompilacji jako zorganizowany zbi\u00f3r wyj\u015bciowy JSON na standardowym wyj\u015bciu. Szczeg\u00f3\u0142y formatu mo\u017cna zobaczy\u0107 w go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Co wi\u0119cej, go test -json teraz raportuje wyniki i b\u0142\u0119dy kompilacji w JSON, zmieszane z JSON-em wynik\u00f3w testowania. Mo\u017cna je rozr\u00f3\u017cni\u0107 wed\u0142ug nowych typ\u00f3w akcji, ale je\u015bli powoduj\u0105 problemy w systemie integracji test\u00f3w, mo\u017cna powr\u00f3ci\u0107 do tekstowego wyj\u015bcia kompilacji poprzez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">ustawienie GODEBUG<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>Nowa zmienna \u015brodowiskowa GOAUTH zapewnia elastyczny spos\u00f3b autoryzowania prywatnych pobra\u0144 modu\u0142\u00f3w. Szczeg\u00f3\u0142y mo\u017cna zobaczy\u0107 w go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>Komenda go build jest teraz instalowana <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">wersja podstawowego modu\u0142u<\/a> w skompilowanym binarnym pliku, w zale\u017cno\u015bci od tagu i\/lub commitu systemu kontroli wersji. Przy braku zaimplementowanych zmian dodany zostanie sufiks +dirty. Mo\u017cna u\u017cy\u0107 flagi -buildvcs=false, aby pomin\u0105\u0107 informacje o kontroli wersji w binarnym pliku.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowa <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">konfiguracja GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> mo\u017ce teraz by\u0107 u\u017cywane do \u015bledzenia procesu wyboru toolchainu w zespole go.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo obs\u0142uguje nowe adnotacje dla funkcji C, aby poprawi\u0107 wydajno\u015b\u0107 czasu wykonywania. #cgo noescape cFunctionName informuje kompilator, \u017ce pami\u0119\u0107 przekazywana do funkcji C cFunctionName nie ucieka. #cgo nocallback cFunctionName informuje kompilator, \u017ce funkcja C cFunctionName nie wywo\u0142uje \u017cadnych funkcji Go. Wi\u0119cej informacji mo\u017cna znale\u017a\u0107 w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">dokumentacji cgo<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo obecnie odrzuca kompilacj\u0119 wywo\u0142a\u0144 funkcji C, kt\u00f3re maj\u0105 wiele niekompatybilnych deklaracji. Na przyk\u0142ad, je\u015bli f jest zadeklarowane zar\u00f3wno jako void f(int), jak i void f(double), cgo zg\u0142osi b\u0142\u0105d zamiast mo\u017cliwej generacji niepoprawnej sekwencji wywo\u0142ania f(0). Nowo\u015bci\u0105 w tej wersji jest lepsze wykrywanie tego stanu b\u0142\u0119du, gdy niekompatybilne deklaracje pojawiaj\u0105 si\u0119 w r\u00f3\u017cnych plikach. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>Narz\u0119dzie objdump teraz obs\u0142uguje disasembly dla 64-bitowego LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) i S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Nowy analizator tests zg\u0142asza powszechne b\u0142\u0119dy w deklaracjach test\u00f3w, fuzzers, benchmark\u00f3w i przyk\u0142ad\u00f3w w pakietach testowych, takie jak \u017ale sformu\u0142owane nazwy, nieprawid\u0142owe sygnatury lub przyk\u0142ady, kt\u00f3re dokumentuj\u0105 nieistniej\u0105ce identyfikatory. Niekt\u00f3re z tych b\u0142\u0119d\u00f3w mog\u0105 prowadzi\u0107 do niewykonania test\u00f3w.<\/p>\n<p> <noindex><\/p>\n<p>Istniej\u0105cy analizator printf teraz zg\u0142asza diagnostyk\u0119 wywo\u0142a\u0144 w formie fmt.Printf(s), gdzie s to niekonstansowy \u0142a\u0144cuch formatu, bez innych argument\u00f3w. Takie wywo\u0142ania prawie zawsze s\u0105 b\u0142\u0119dem, poniewa\u017c warto\u015b\u0107 s mo\u017ce zawiera\u0107 symbol %; zamiast tego u\u017cyj fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Ta kontrola ma tendencj\u0119 do wykrywania b\u0142\u0119d\u00f3w w istniej\u0105cym kodzie, dlatego jest stosowana tylko wtedy, gdy wersja j\u0119zyka (okre\u015blona przez dyrektyw\u0119 go w pliku go.mod lub komentarzami `\/\/go:build) jest co najmniej Go 1.24, aby unikn\u0105\u0107 awarii d\u0142ugoterminowej integracji podczas aktualizacji do toolchainu Go 1.24.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Istniej\u0105cy analizator buildtag teraz zg\u0142asza diagnostyk\u0119, gdy jest nieprawid\u0142owe <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">ograniczenie starszej wersji kompilacji<\/a> Go w dyrektywie \/\/go:build. Na przyk\u0142ad, \/\/go:build go1.23.1 odnosi si\u0119 do wydania punktowego; zamiast tego u\u017cyj \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Istniej\u0105cy analizator copylock teraz zg\u0142asza diagnostyk\u0119, gdy zmienna zadeklarowana w tr\u00f3jpierwiastkowej p\u0119tli for, takiej jak for i := iter(); done(i); i = next(i) { \u2026 }, zawiera sync.Locker, taki jak sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> zmieni\u0142 zachowanie takich p\u0119tli na tworzenie nowej zmiennej przy ka\u017cdej iteracji, kopiuj\u0105c warto\u015bci z poprzedniej iteracji; to kopiowanie nie jest bezpieczne dla blokad. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/66387\">#66387<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>GOCACHEPROG<\/h3>\n<p> <noindex><\/p>\n<p>Wewn\u0119trzny binarny plik cmd\/go oraz mechanizm cache'owania test\u00f3w mog\u0105 teraz by\u0107 realizowane przez procesy podrz\u0119dne implementuj\u0105ce protok\u00f3\u0142 JSON pomi\u0119dzy narz\u0119dziem cmd\/go a procesem podrz\u0119dnym, nazwanym zmienn\u0105 \u015brodowiskow\u0105 GOCACHEPROG. Wcze\u015bniej by\u0142a to ustawiana jako GOEXPERIMENT. Szczeg\u00f3\u0142y protoko\u0142u mo\u017cna zobaczy\u0107 w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">dokumentacji<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Czas wykonania<\/h2>\n<p> <noindex><\/p>\n<p>Kilka ulepsze\u0144 wydajno\u015bci w czasie dzia\u0142ania zmniejszy\u0142o obci\u0105\u017cenie CPU o 2-3% \u015brednio w\u015br\u00f3d zestawu reprezentatywnych benchmark\u00f3w. Wyniki mog\u0105 si\u0119 r\u00f3\u017cni\u0107 w zale\u017cno\u015bci od aplikacji. Ulepszenia te obejmuj\u0105 now\u0105 wbudowan\u0105 implementacj\u0119 mapy opart\u0105 na <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Szwedzkich Tablicach<\/a>, bardziej efektywne przydzielanie pami\u0119ci ma\u0142ych obiekt\u00f3w oraz now\u0105 wewn\u0119trzn\u0105 implementacj\u0119 mutex\u00f3w w czasie dzia\u0142ania.<\/p>\n<p><\/noindex> <\/p>\n<p>Nowa wbudowana implementacja mapy oraz nowy wewn\u0119trzny mutex w czasie dzia\u0142ania mog\u0105 by\u0107 wy\u0142\u0105czone za pomoc\u0105 ustawie\u0144 GOEXPERIMENT=noswissmap oraz GOEXPERIMENT=nospinbitmutex podczas budowy odpowiednio.<\/p>\n<h2>Kompilator<\/h2>\n<p>Kompilator ju\u017c zabrania\u0142 definiowania nowych metod z typami odbiorcy, kt\u00f3re by\u0142y generowane przez cgo, ale mo\u017cliwe by\u0142o obej\u015bcie tego ograniczenia poprzez alias typu. Go 1.24 teraz zawsze zg\u0142asza b\u0142\u0105d, je\u015bli odbiorca oznacza typ generowany przez cgo, bezpo\u015brednio lub po\u015brednio (poprzez alias typu).<\/p>\n<h2>Linker<\/h2>\n<p>Linker teraz generuje identyfikator kompilacji GNU (zapisy ELF NT_GNU_BUILD_ID) na platformach ELF i UUID (polecenie \u0142adowania Mach-O LC_UUID) na macOS domy\u015blnie. Identyfikator kompilacji lub UUID jest wyprowadzany z identyfikatora kompilacji Go. Mo\u017cna to wy\u0142\u0105czy\u0107 flag\u0105 linkera -B none, lub nadpisa\u0107 flag\u0105 linkera -B 0xNNNN z podan\u0105 przez u\u017cytkownika warto\u015bci\u0105 szesnastkow\u0105.<\/p>\n<h2>Wydanie<\/h2>\n<p> <noindex><\/p>\n<p>Jak zosta\u0142o wskazane w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">uwagach dotycz\u0105cych wydania Go 1.22<\/a>, Go 1.24 wymaga teraz Go 1.22.6 lub nowszego do kompilacji. Oczekuje si\u0119, \u017ce Go 1.26 b\u0119dzie wymaga\u0107 poprawki Go 1.24 lub nowszego do kompilacji.<\/p>\n<p><\/noindex> <\/p>\n<h2>Biblioteka standardowa<\/h2>\n<h3>Ograniczony dost\u0119p do systemu plik\u00f3w w obr\u0119bie katalogu<\/h3>\n<p> <noindex><\/p>\n<p>Nowy typ <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> umo\u017cliwia wykonywanie operacji na systemie plik\u00f3w w obr\u0119bie okre\u015blonego katalogu.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>veth_xdp_flush_bq() <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> otwiera katalog i zwraca <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Metody na <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> operuj\u0105 w tym katalogu i nie pozwalaj\u0105 na odniesienia do lokalizacji poza katalogiem, w tym tych, kt\u00f3re prowadz\u0105 przez dowi\u0105zania symboliczne poza katalog. Metody na os.Root odzwierciedlaj\u0105 wi\u0119kszo\u015b\u0107 operacji systemu plik\u00f3w dost\u0119pnych w pakiecie os, w tym na przyk\u0142ad <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Open\">os.Root.Open<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Create\">os.Root.Create<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Mkdir\">os.Root.Mkdir<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nowa funkcja benchmarkowa<\/h3>\n<p> <noindex><\/p>\n<p>Benchmarki mog\u0105 teraz u\u017cywa\u0107 szybszej i mniej podatnej na b\u0142\u0119dy metody <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> do iteracji benchmark\u00f3w, jak for b.Loop() { ... } zamiast typowych struktur p\u0119tli z udzia\u0142em b.N, jak for range b.N. To oferuje dwie znacz\u0105ce zalety:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Funkcja benchmarkowa jest wykonywana dok\u0142adnie raz dla ka\u017cdego -count, dzi\u0119ki czemu kosztowne kroki przygotowawcze i czyszczenia s\u0105 wykonywane tylko raz.<\/li>\n<li>Parametry wywo\u0142ania funkcji i wyniki pozostaj\u0105 dost\u0119pne, zapobiegaj\u0105c pe\u0142nej optymalizacji cia\u0142a p\u0119tli przez kompilator.<\/li>\n<\/ul>\n<h3>Ulepszone finalizatory<\/h3>\n<p> <noindex><\/p>\n<p>Nowa funkcja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> jest elastycznym, bardziej efektywnym i mniej podatnym na b\u0142\u0119dy mechanizmem sprz\u0105tania ni\u017c <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup przypisuje funkcj\u0119 czyszcz\u0105c\u0105 do obiektu, kt\u00f3ra zostanie uruchomiona, gdy obiekt stanie si\u0119 niedost\u0119pny. W przeciwie\u0144stwie do SetFinalizer jednak, wiele funkcji sprz\u0105taj\u0105cych mo\u017ce by\u0107 przypisanych do jednego obiektu, sprz\u0105tania mog\u0105 by\u0107 przypisane do wska\u017anik\u00f3w wewn\u0119trznych, a sprz\u0105tania zazwyczaj nie powoduj\u0105 wyciek\u00f3w, gdy obiekty tworz\u0105 cykl, i sprz\u0105tania nie odk\u0142adaj\u0105 zwolnienia obiektu lub obiekt\u00f3w, na kt\u00f3re on wskazuje. Nowy kod powinien preferowa\u0107 AddCleanup wzgl\u0119dem SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nowy pakiet weak<\/h3>\n<p> <noindex><\/p>\n<p>Nowy pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> zapewnia s\u0142abe wska\u017aniki.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>S\u0142abe wska\u017aniki s\u0105 niskopoziomowym prymitywem, kt\u00f3ry umo\u017cliwia tworzenie struktur wykorzystuj\u0105cych pami\u0119\u0107 efektywnie, takich jak s\u0142abe s\u0142owniki do mapowania warto\u015bci, s\u0142ownik\u00f3w kanonizacyjnych do czegokolwiek, co nie jest pokryte pakietem <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, i r\u00f3\u017cnych rodzaj\u00f3w pami\u0119ci podr\u0119cznej. Aby wspiera\u0107 te przypadki u\u017cycia, ta wersja r\u00f3wnie\u017c udost\u0119pnia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparable<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nowy pakiet crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Nowy pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementuje ML-KEM-768 i ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM jest post-kwantowym mechanizmem wymiany kluczy, wcze\u015bniej znanym jako Kyber i specyfikowanym w <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nowe pakiety crypto\/hkdf, crypto\/pbkdf2 i crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Nowy pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementuje opart\u0105 na HMAC funkcj\u0119 wyj\u015bciow\u0105 klucza 'Extract-and-Expand' HKDF, jak okre\u015blono w <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowy pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementuje opart\u0105 na ha\u015ble funkcj\u0119 wyj\u015bciow\u0105 klucza PBKDF2, jak okre\u015blono w <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowy pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementuje funkcj\u0119 haszuj\u0105c\u0105 SHA-3 oraz funkcje SHAKE i cSHAKE o rozszerzonym wyj\u015bciu, jak okre\u015blono w <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Wszystkie trzy pakiety bazuj\u0105 na wcze\u015bniej istniej\u0105cych pakietach golang.org\/x\/crypto\/\u2026.<\/p>\n<h3>Zgodno\u015b\u0107 FIPS 140-3<\/h3>\n<p> <noindex><\/p>\n<p>Ta wersja zawiera <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">nowy zestaw mechanizm\u00f3w do zapewnienia zgodno\u015bci z FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Modu\u0142 kryptograficzny Go jest zbiorem wewn\u0119trznych pakiet\u00f3w standardowej biblioteki, kt\u00f3re s\u0105 transparantnie u\u017cywane do implementacji zatwierdzonych algorytm\u00f3w FIPS 140-3. Aplikacje nie wymagaj\u0105 zmian, aby m\u00f3c u\u017cywa\u0107 modu\u0142u kryptograficznego Go do zatwierdzonych algorytm\u00f3w.<\/p>\n<p> <noindex><\/p>\n<p>Nowa zmienna \u015brodowiskowa GOFIPS140 mo\u017ce by\u0107 u\u017cyta do wyboru wersji modu\u0142u kryptograficznego Go do wykorzystania w kompilacji. Nowa <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">konfiguracja GODEBUG<\/a> fips140 mo\u017ce by\u0107 u\u017cyta do w\u0142\u0105czenia trybu FIPS 140-3 w trakcie dzia\u0142ania.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 zawiera wersj\u0119 v1.0.0 modu\u0142u kryptograficznego Go, kt\u00f3ra obecnie jest testowana z akredytowanym laboratorium CMVP.<\/p>\n<h3>Nowy eksperymentalny pakiet testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Nowy eksperymentalny pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> oferuje wsparcie dla testowania wsp\u00f3\u0142bie\u017cnego kodu.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>veth_xdp_flush_bq() <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> uruchamia grup\u0119 gorutin w izolowanej 'ba\u0144ce'. W ba\u0144ce funkcje pakietu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> operuj\u0105 na fa\u0142szywych zegarach.<\/li>\n<li>Funkcje <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> oczekuj\u0105, a\u017c wszystkie gorutyny zostan\u0105 zablokowane w bie\u017c\u0105cej ba\u0144ce.<\/li>\n<\/ul>\n<p>Szczeg\u00f3\u0142y mo\u017cna zobaczy\u0107 w dokumentacji pakietu.<\/p>\n<p> <noindex><\/p>\n<p>Pakiet synctest jest eksperymentalny i musi by\u0107 w\u0142\u0105czony poprzez ustawienie GOEXPERIMENT=synctest. API pakietu mo\u017ce si\u0119 zmieni\u0107 w przysz\u0142ych wersjach. W <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> mo\u017cna zobaczy\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w i przes\u0142a\u0107 opini\u0119.<\/p>\n<p><\/noindex> <\/p>\n<h3>Niewielkie zmiany w bibliotece<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Implementacje (*Writer.AddFS) w archive\/zip i archive\/tar teraz zapisuj\u0105 nag\u0142\u00f3wek katalogu dla pustego katalogu.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> dodaje kilka funkcji, kt\u00f3re dzia\u0142aj\u0105 z iteratorami:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> zwraca iterator po linii podzielonych now\u0105 lini\u0105 w ci\u0105gu bajt\u00f3w.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> zwraca iterator dla wszystkich podprzedzia\u0142\u00f3w tablicy bajt\u00f3w, podzielonej separatorem.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> zwraca iterator dla podprzedzia\u0142\u00f3w tablicy bajt\u00f3w, podzielonej po ka\u017cdym wyst\u0105pieniu separatora.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> zwraca iterator dla podprzedzia\u0142\u00f3w tablicy bajt\u00f3w wok\u00f3\u0142 sekwencji spacji, jak okre\u015blono. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsFuncSeq\">FieldsFuncSeq<\/a> zwraca iterator dla podprzedzia\u0142\u00f3w tablicy bajt\u00f3w wok\u00f3\u0142 sekwencji punkt\u00f3w kodowych Unicode, spe\u0142niaj\u0105cych predykat.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Warto\u015b\u0107 zwracana <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> ju\u017c nie implementuje metod NewCTR, NewGCM, NewCBCEncrypter i NewCBCDecrypter. Te metody by\u0142y nieudokumentowane i nie by\u0142y dost\u0119pne na wszystkich architekturach. Teraz warto\u015b\u0107 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> musi by\u0107 przekazywana bezpo\u015brednio do odpowiednich funkcji <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. Na dzie\u0144 dzisiejszy crypto\/cipher nadal sprawdza te metody dla warto\u015bci Block, nawet je\u015bli nie s\u0105 ju\u017c wspierane przez standardow\u0105 bibliotek\u0119.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nowa funkcja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> zwraca <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, kt\u00f3ry implementuje AES-GCM, generuj\u0105c losowy jednokrotnego u\u017cycia numer w czasie Seal i dodaj\u0105c go na pocz\u0105tku zaszyfrowanego tekstu.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Realizacja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, zwracana <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> przy u\u017cyciu z <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> jest teraz wielokrotnie szybsza na amd64 i arm64.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewOFB\">NewOFB<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBEncrypter\">NewCFBEncrypter<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> s\u0105 teraz oznaczone jako przestarza\u0142e. Tryby OFB i CFB s\u0105 nieautoryzowane, co generalnie pozwala aktywnym atakom na manipulacj\u0119 i przywracanie jawnego tekstu. Aplikacjom zaleca si\u0119 u\u017cycie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> zamiast. Je\u015bli nieautoryzowany tryb <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> jest konieczny, mo\u017cna u\u017cy\u0107 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> zamiast.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa\/\">crypto\/ecdsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/ecdsa#PrivateKey.Sign\">PrivateKey.Sign<\/a> teraz tworzy deterministyczny podpis zgodnie z <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, je\u015bli \u017ar\u00f3d\u0142o losowo\u015bci nil.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/md5\/\">crypto\/md5<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Warto\u015b\u0107 zwracana <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, teraz r\u00f3wnie\u017c implementuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand\/\">crypto\/rand<\/a><\/h4>\n<p> <noindex><\/p>\n<p>veth_xdp_flush_bq() <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">Odczyt<\/a> teraz zapewnia brak niepowodze\u0144. Je\u015bli Read napotka b\u0142\u0105d podczas czytania <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, program bezpowrotnie zako\u0144czy dzia\u0142anie. Nale\u017cy zauwa\u017cy\u0107, \u017ce domy\u015blny Reader jest udokumentowany jako zawsze dzia\u0142aj\u0105cy pomy\u015blnie, wi\u0119c ta zmiana powinna dotkn\u0105\u0107 tylko te programy, kt\u00f3re nadpisuj\u0105 zmienn\u0105 Reader. Jedynym wyj\u0105tkiem s\u0105 j\u0105dra Linux przed wersj\u0105 3.17, gdzie domy\u015blny Reader nadal otwiera \/dev\/urandom i mo\u017ce zako\u0144czy\u0107 si\u0119 niepowodzeniem.<\/p>\n<p><\/noindex> <\/p>\n<p>Na Linux 6.11 i p\u00f3\u017aniej Reader teraz wykorzystuje wywo\u0142anie systemowe getrandom przez vDSO. Jest to wielokrotnie szybsze, zazwyczaj dla niewielkich odczyt\u00f3w.<\/p>\n<p>Na OpenBSD Reader teraz u\u017cywa arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Nowa funkcja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Tekst<\/a> teraz mo\u017ce generowa\u0107 kryptograficznie bezpieczne losowe ci\u0105gi tekstu.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa\/\">crypto\/rsa<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> teraz zwraca b\u0142\u0105d, je\u015bli \u017c\u0105dany klucz ma d\u0142ugo\u015b\u0107 mniejsz\u0105 ni\u017c 1024 bity. Wszystkie metody Sign, Verify, Encrypt i Decrypt teraz zwracaj\u0105 b\u0142\u0105d, je\u015bli s\u0105 u\u017cywane z kluczem mniejszym ni\u017c 1024 bity. Takie klucze s\u0105 niebezpieczne i nie powinny by\u0107 u\u017cywane. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Konfiguracja GODEBUG<\/a> rsa1024min=0 przywraca wcze\u015bniejsze zachowanie, ale deweloperzy Go zalecaj\u0105 to tylko w razie konieczno\u015bci i tylko w testach, na przyk\u0142ad dodaj\u0105c lini\u0119 \/\/go:debug rsa1024min=0 do pliku testowego. Nowy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">przyk\u0142ad<\/a> GenerateKey zapewnia \u0142atwy w u\u017cyciu standardowy 2024-bitowy klucz testowy.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Teraz bezpiecznie i bardziej efektywnie wywo\u0142uj <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> do <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute jest teraz szybsze w obecno\u015bci cz\u0119\u015bciowo wype\u0142nionych <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, na przyk\u0142ad podczas wyodr\u0119bniania klucza z JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pakiet teraz odrzuca wi\u0119cej niepoprawnych kluczy, nawet gdy Validate nie jest wywo\u0142ywana, i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> teraz mo\u017ce zwr\u00f3ci\u0107 nowe b\u0142\u0119dy dla uszkodzonych \u017ar\u00f3de\u0142 losowo\u015bci. Pola <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> struktury <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> s\u0105 teraz u\u017cywane i walidowane nawet gdy niekt\u00f3re warto\u015bci s\u0105 brakuj\u0105ce. Wprowadzono tak\u017ce zmiany w crypto\/x509 w zakresie analizy i wyodr\u0119bniania kluczy RSA, opisano to poni\u017cej.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> teraz obs\u0142uguj\u0105 SHA-512\/224, SHA-512\/256 i SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> teraz u\u017cywa nieco innej metody do generowania prywatnej eksponenty (funkcja Carmichaela zamiast funkcji Eulera). Rzadkie aplikacje, kt\u00f3re na zewn\u0105trz przetwarzaj\u0105 klucze tylko z liczb pierwszych, mog\u0105 generowa\u0107 r\u00f3\u017cne, ale kompatybilne wyniki.<\/p>\n<p><\/noindex> <\/p>\n<p>Operacje na kluczach publicznych i prywatnych s\u0105 teraz do dw\u00f3ch razy szybsze na wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: warto\u015b\u0107 zwracana przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> teraz r\u00f3wnie\u017c implementuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha256\/\">crypto\/sha256<\/a>: warto\u015bci zwracane przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> teraz r\u00f3wnie\u017c implementuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha512\/\">crypto\/sha512<\/a>: warto\u015bci zwracane przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New\">sha512.New<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New384\">sha512.New384<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_224\">sha512.New512_224<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, teraz r\u00f3wnie\u017c implementuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle\/\">crypto\/subtle<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nowa funkcja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> umo\u017cliwia u\u017cytkownikowi wykonanie funkcji z w\u0142\u0105czonymi funkcjami specyficznymi dla architektury, kt\u00f3re gwarantuj\u0105 niezmienno\u015b\u0107 okre\u015blonych instrukcji wzgl\u0119dem czasu warto\u015bci danych. Mo\u017ce by\u0107 u\u017cywane, aby upewni\u0107 si\u0119, \u017ce kod stworzony do pracy w sta\u0142ym czasie nie zosta\u0142 zoptymalizowany funkcjami poziomu procesora w taki spos\u00f3b, \u017ce dzia\u0142a w zmiennym czasie. W tej chwili WithDataIndependentTiming u\u017cywa bitu PSTATE.DIT na arm64 i nic nie robi na wszystkich innych architekturach. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Konfiguracja GODEBUG<\/a> dataindependenttiming=1 w\u0142\u0105cza tryb DIT dla ca\u0142ego programu Go.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Wnioski <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> musi w pe\u0142ni pokrywa\u0107 si\u0119 lub nie w og\u00f3le z wej\u015bciem. Wcze\u015bniejsze zachowanie by\u0142o nieokre\u015blone w przeciwnym razie, podczas gdy teraz XORBytes b\u0119dzie panikowa\u0107.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls\/\">crypto\/tls<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Serwer TLS teraz obs\u0142uguje Encrypted Client Hello (ECH). Ta funkcjonalno\u015b\u0107 mo\u017ce by\u0107 w\u0142\u0105czona poprzez wype\u0142nienie pola <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowy postkwantowy mechanizm wymiany kluczy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> jest teraz obs\u0142ugiwany i w\u0142\u0105czony domy\u015blnie, gdy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> jest nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Konfiguracja GODEBUG<\/a> tlsmlkem=0 zwraca warto\u015bci domy\u015blne.<\/p>\n<p><\/noindex> <\/p>\n<p>Wsparcie dla eksperymentalnej wymiany klucza X25519Kyber768Draft00 zosta\u0142o usuni\u0119te.<\/p>\n<p> <noindex><\/p>\n<p>Kolejno\u015b\u0107 wymiany klucza jest teraz ca\u0142kowicie obs\u0142ugiwana przez pakiet crypto\/tls. Kolejno\u015b\u0107 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> jest teraz ignorowana, a zawarto\u015b\u0107 u\u017cywana wy\u0142\u0105cznie do okre\u015blenia, kt\u00f3re wymiany klucza w\u0142\u0105czy\u0107, gdy pole jest wype\u0142nione.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowe pole <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> wylicza list\u0119 identyfikator\u00f3w rozszerze\u0144 otrzymanych w wiadomo\u015bci Client Hello. Mo\u017ce to by\u0107 przydatne do \u015bledzenia odcisk\u00f3w klient\u00f3w TLS.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509\/\">crypto\/x509<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">Konfiguracja GODEBUG<\/a> x509sha1 zosta\u0142o usuni\u0119te. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> nie obs\u0142uguje ju\u017c podpis\u00f3w opartych na SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> teraz implementuje interfejsy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Domy\u015blne pole polityk certyfikat\u00f3w zosta\u0142o zmienione z <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> na <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Podczas analizy certyfikat\u00f3w oba pola b\u0119d\u0105 wype\u0142nione, ale przy tworzeniu polityk certyfikat\u00f3w zostan\u0105 wzi\u0119te z pola Certificate.Policies zamiast Certificate.PolicyIdentifiers. Ta zmiana mo\u017ce by\u0107 przywr\u00f3cona <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">ustawieniem GODEBUG<\/a> x509usepolicies=0.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#CreateCertificate\">CreateCertificate<\/a> teraz b\u0119dzie generowa\u0107 numer seryjny u\u017cywaj\u0105c metody zgodnej z RFC 5280, przy przekazywaniu wzoru przez pole <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, zamiast wysypania b\u0142\u0119du.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> teraz obs\u0142uguje walidacj\u0119 polityki, jak okre\u015blono w RFC 5280 i RFC 9618. Nowe pole <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> mo\u017ce by\u0107 ustawione na akceptowalny zestaw polityk <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Tylko \u0142a\u0144cuchy certyfikat\u00f3w z wa\u017cnymi politykami b\u0119d\u0105 zwracane z <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS8PrivateKey\">MarshalPKCS8PrivateKey<\/a> teraz zwraca b\u0142\u0105d zamiast wydobywa\u0107 niew\u0142a\u015bciwy klucz RSA. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> nie ma zwracania b\u0142\u0119d\u00f3w, a jego zachowanie w przypadku nieprawid\u0142owych kluczy pozostaje nieokre\u015blone.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> teraz u\u017cywaj\u0105 i waliduj\u0105 zakodowane warto\u015bci CRT, dlatego mog\u0105 odrzuca\u0107 niew\u0142a\u015bciwe klucze RSA, kt\u00f3re wcze\u015bniej by\u0142y akceptowane. U\u017cycie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">ustawienia GODEBUG<\/a> x509rsacrt=0 przywraca do przeliczania warto\u015bci CRT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\/\">debug\/elf<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> dodaje wsparcie dla obs\u0142ugi wersji symboli w dynamicznych plikach ELF (Executable and Linkable Format). Nowa metoda <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> zwraca list\u0119 dynamicznych wersji zdefiniowanych w pliku ELF. Nowa metoda <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> zwraca list\u0119 dynamicznych wersji wymaganych przez ten plik ELF, kt\u00f3re s\u0105 zdefiniowane w innych obiektach ELF. W ko\u0144cu nowe pola <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> okre\u015blaj\u0105 wersj\u0119 symbolu.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/\">encoding<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Dwa nowe interfejsy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> zosta\u0142y wprowadzone do dodawania tekstowej lub binarnej reprezentacji obiektu do dynamicznej tablicy bajt\u00f3w. Te interfejsy oferuj\u0105 t\u0119 sam\u0105 funkcjonalno\u015b\u0107 co <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, ale zamiast przydziela\u0107 now\u0105 tablic\u0119 za ka\u017cdym razem, dodaj\u0105 dane bezpo\u015brednio do istniej\u0105cej tablicy. Te interfejsy s\u0105 teraz realizowane przez typy standardowej biblioteki, kt\u00f3re ju\u017c implementuj\u0105 TextMarshaler i\/lub BinaryMarshaler.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json\/\">encoding\/json<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Podczas budowania pole struktury z now\u0105 opcj\u0105 omitzero w tagu pola struktury zostanie pomini\u0119te, je\u015bli jego warto\u015b\u0107 wynosi zero. Je\u015bli typ pola ma metod\u0119 IsZero() bool, zostanie ona u\u017cyta do okre\u015blenia, czy warto\u015b\u0107 jest zerowa. W przeciwnym razie warto\u015b\u0107 b\u0119dzie zerowa, je\u015bli jest <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">warto\u015bci\u0105 zerow\u0105 dla jego typu<\/a>. Tag pola omitzero jest czystszy i mniej podatny na b\u0142\u0119dy ni\u017c omitempty, gdy intencj\u0105 jest pomini\u0119cie zerowych warto\u015bci. W szczeg\u00f3lno\u015bci, w przeciwie\u0144stwie do omitempty, omitzero pomija zerowe <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> warto\u015bci, co jest cz\u0119stym \u017ar\u00f3d\u0142em problem\u00f3w.<\/p>\n<p><\/noindex> <\/p>\n<p>Je\u015bli okre\u015blono zar\u00f3wno omitempty, jak i omitzero, pole zostanie pomini\u0119te, je\u015bli warto\u015b\u0107 jest pusta lub zerowa (lub oba razem).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> teraz zawiera wbudowane struktury w celu dostarczenia bardziej szczeg\u00f3\u0142owych komunikat\u00f3w o b\u0142\u0119dach.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Wszystkie struktury danych go\/types, kt\u00f3re ujawniaj\u0105 sekwencje par metod, takich jak Len() int i At(int) T, maj\u0105 teraz r\u00f3wnie\u017c metody, kt\u00f3re zwracaj\u0105 iteratory, co umo\u017cliwia uproszczenie kodu podobnego do tego:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Na to:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>Metody: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.EmbeddedTypes\">Interface.EmbeddedTypes<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.ExplicitMethods\">Interface.ExplicitMethods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Interface.Methods\">Interface.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#MethodSet.Methods\">MethodSet.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Named.Methods\">Named.Methods<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Scope.Children\">Scope.Children<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Struct.Fields\">Struct.Fields<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Tuple.Variables\">Tuple.Variables<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeList.Types\">TypeList.Types<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#TypeParamList.TypeParams\">TypeParamList.TypeParams<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types#Union.Terms\">Union.Terms<\/a><\/p>\n<p><\/noindex> <\/p>\n<h4>hash\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32\/\">hash\/adler32<\/a>: warto\u015b\u0107 zwracana przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Nowe<\/a>, teraz r\u00f3wnie\u017c implementuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32\/\">hash\/crc32<\/a>: warto\u015bci zwracane przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Nowe<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, teraz r\u00f3wnie\u017c implementuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64\/\">hash\/crc64<\/a>: warto\u015b\u0107 zwracana przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Nowe<\/a>, teraz r\u00f3wnie\u017c implementuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv\/\">hash\/fnv<\/a>: warto\u015bci zwracane przez <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32\">New32<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New32a\">New32a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64\">New64<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New64a\">New64a<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128\">New128<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, teraz r\u00f3wnie\u017c implementuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash\/\">hash\/maphash<\/a>: nowe funkcje <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> mog\u0105 oblicza\u0107 hasz ka\u017cdego warto\u015bci, kt\u00f3ra mo\u017ce by\u0107 por\u00f3wnywana. Umo\u017cliwia to haszowanie czegokolwiek, co mo\u017ce by\u0107 u\u017cyte jako klucz w s\u0142owniku Go.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog\/\">log\/slog<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nowy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> jest handlerem, kt\u00f3ry nigdy nie jest w\u0142\u0105czany i zawsze odrzuca swoje wyj\u015bcie.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Poziom<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> teraz realizuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4>math\/*<\/h4>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big\/\">math\/big<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Float\">Float<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Int\">Int<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> teraz realizuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/\">math\/rand<\/a>: wywo\u0142ania przestarza\u0142ej funkcji wysokiego poziomu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> ju\u017c nie maj\u0105 \u017cadnego efektu. Aby przywr\u00f3ci\u0107 stare zachowanie, mo\u017cna u\u017cy\u0107 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">ustawienie GODEBUG<\/a> randseednop=0. Wi\u0119cej kontekstu w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">zdaniu 67273<\/a>.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2\/\">math\/rand\/v2<\/a>: <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#ChaCha8\">ChaCha8<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> teraz realizuj\u0105 interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/\">net<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#ListenConfig\">ListenCondig<\/a> teraz u\u017cywa MPTCP domy\u015blnie na systemach, gdzie jest to wspierane (na razie tylko Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> teraz realizuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/\">net\/http<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Zmieni\u0142o si\u0119 ograniczenie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> na uzyskane odpowiedzi informacyjne 1xx w odpowiedzi na \u017c\u0105danie. Wcze\u015bniej zatrzymywa\u0142o to \u017c\u0105danie i zwraca\u0142o b\u0142\u0105d po otrzymaniu wi\u0119cej ni\u017c 5 odpowiedzi 1xx. Teraz zwraca b\u0142\u0105d tylko wtedy, gdy ca\u0142kowity rozmiar wszystkich odpowiedzi 1xx przekracza ustawienie konfiguracyjne <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ponadto, gdy \u017c\u0105danie ma hak do \u015bledzenia <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, teraz nie ma ograniczenia na og\u00f3ln\u0105 liczb\u0119 odpowiedzi 1xx. Hak Got1xxResponse mo\u017ce zwr\u00f3ci\u0107 b\u0142\u0105d w celu zatrzymania \u017c\u0105dania.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Serwer<\/a> teraz maj\u0105 pole HTTP2, kt\u00f3re pozwala na konfiguracj\u0119 ustawie\u0144 protoko\u0142u HTTP\/2.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowe pola <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> zapewniaj\u0105 prosty spos\u00f3b na skonfigurowanie, jakie protoko\u0142y HTTP serwer lub klient u\u017cywaj\u0105.<\/p>\n<p><\/noindex> <\/p>\n<p>Serwer i klient mog\u0105 by\u0107 skonfigurowani do obs\u0142ugi niezabezpieczonych po\u0142\u0105cze\u0144 HTTP\/2.<\/p>\n<p> <noindex><\/p>\n<p>Kiedy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> zawiera UnencrypterHTTP2, serwer przyjmie po\u0142\u0105czenia HTTP\/2 na niezabezpieczone porty. Serwer mo\u017ce przyj\u0105\u0107 zar\u00f3wno HTTP\/1, jak i niezabezpieczony HTTP\/2 na tym samym porcie.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Kiedy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> zawiera UnencryptedHTTP2 i nie zawiera HTTP1, transport u\u017cyje niezabezpieczonego HTTP\/2 dla adres\u00f3w <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Je\u017celi transport jest skonfigurowany do u\u017cywania zar\u00f3wno HTTP\/1, jak i niezaszyfrowanego HTTP\/2, b\u0119dzie korzysta\u0142 z HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>Wsparcie dla niezaszyfrowanego HTTP\/2 korzysta z \u201eHTTP\/2 z wst\u0119pnym po\u015bwiadczeniem\u201d (RFC 9113, sekcja 3.3). Przestarza\u0142y nag\u0142\u00f3wek \u201eUpgrade: h2c\u201d nie jest wspierany.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip\/\">net\/netip<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Addr\">Adres<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#AddrPort\">AdresPort<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefiks<\/a> teraz implementuje interfejsy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url\/\">net\/url<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/url#URL\">URL<\/a> teraz r\u00f3wnie\u017c implementuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user\/\">os\/user<\/a><\/h4>\n<p> <noindex><\/p>\n<p>W systemie Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktualny<\/a> mo\u017ce by\u0107 teraz u\u017cywany w Windows Nano Server. Implementacja zosta\u0142a zaktualizowana, aby unikn\u0105\u0107 korzystania z funkcji z biblioteki NetApi32, kt\u00f3ra jest niedost\u0119pna w Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>W systemie Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktualny<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> teraz wspieraj\u0105 nast\u0119puj\u0105ce wbudowane konta serwisowe u\u017cytkownika:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>NT AUTHORITYSYSTEM<\/li>\n<li>NT AUTHORITYLOCAL SERVICE<\/li>\n<li>NT AUTHORITYNETWORK SERVICE<\/li>\n<\/ul>\n<p> <noindex><\/p>\n<p>W systemie Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktualny<\/a> zosta\u0142 znacznie przyspieszony, gdy bie\u017c\u0105cy u\u017cytkownik jest pod\u0142\u0105czony do wolnej domeny, co jest cz\u0119stym przypadkiem dla wielu u\u017cytkownik\u00f3w korporacyjnych. Nowa wydajno\u015b\u0107 implementacji teraz wynosi kilka milisekund, w por\u00f3wnaniu do wcze\u015bniejszej implementacji, kt\u00f3ra mog\u0142a zaj\u0105\u0107 kilka sekund, a nawet minut, do zako\u0144czenia.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>W systemie Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktualny<\/a> teraz zwraca u\u017cytkownika b\u0119d\u0105cego w\u0142a\u015bcicielem procesu, gdy bie\u017c\u0105cy w\u0105tek udaje si\u0119 za innego u\u017cytkownika. Wcze\u015bniej zwraca\u0142o to b\u0142\u0105d.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp\/\">regexp<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/regexp#Regexp\">Regexp<\/a> teraz realizuje interfejs <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAdapter<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/\">runtime<\/a><\/h4>\n<p> <noindex><\/p>\n<p>veth_xdp_flush_bq() <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> zosta\u0142 teraz uznany za przestarza\u0142y. W nowym kodzie nale\u017cy preferowa\u0107 u\u017cycie \u015bcie\u017cki systemowej do okre\u015blenia pliku binarnego 'go', oraz u\u017cywa\u0107 go env GOROOT do okre\u015blenia GOROOT.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\/\">strings<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pakiet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> dodaje kilka funkcji do pracy z iteratorami:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> zwraca iterator po wierszach rozdzielonych nowymi liniami w ci\u0105gu.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> zwraca iterator po wszystkich podci\u0105gach ci\u0105gu, rozdzielonych separatorem.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> zwraca iterator po podci\u0105gach ci\u0105gu, oddzielonych po ka\u017cdym wyst\u0105pieniu separatora.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> zwraca iterator po podci\u0105gach ci\u0105gu wok\u00f3\u0142 sekwencji znak\u00f3w bia\u0142ych, tak jak zdefiniowano.<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unicode#IsSpace\">unicode.IsSpace<\/a><\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsFuncSeq\">FieldsFuncSeq<\/a> zwraca iterator po podci\u0105gach ci\u0105gu wok\u00f3\u0142 sekwencji punkt\u00f3w kodowych unicode, kt\u00f3re spe\u0142niaj\u0105 predykat.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Realizacja <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> zosta\u0142 zmieniony, poprawiaj\u0105c wydajno\u015b\u0107, szczeg\u00f3lnie dla zmian w s\u0142ownikach. Na przyk\u0142ad, jest mniej prawdopodobne, \u017ce nast\u0105pi wsp\u00f3\u0142zawodnictwo zmian w nieprzeci\u0119tnych zestawach na du\u017cych s\u0142ownikach, a czas na przyrost do osi\u0105gni\u0119cia niskiego wsp\u00f3\u0142zawodnictwa w s\u0142owniku nie jest ju\u017c wymagany.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Je\u015bli napotkasz jakiekolwiek problemy, ustaw GOEXPERIMENT=nosynchashtriemap podczas budowy, aby wr\u00f3ci\u0107 do starej implementacji, i prosz\u0119, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">wype\u0142nij formularz zg\u0142oszenia problemu<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/\">testing<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Nowe metody <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> zwracaj\u0105 kontekst, kt\u00f3ry jest anulowany po zako\u0144czeniu testu i przed wykonaniem funkcji czyszcz\u0105cych test.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nowe metody <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> mog\u0105 by\u0107 u\u017cywane do zmiany katalogu roboczego w czasie trwania testu lub benchmarku.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Szablony teraz wspieraj\u0105 range-over-func oraz range-over-int.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\/\">time<\/a><\/h4>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">Czas<\/a> teraz implementuje interfejsy <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Porty<\/h2>\n<h3>Linuxa<\/h3>\n<p> <noindex><\/p>\n<p>Jak by\u0142o <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">og\u0142oszono<\/a> w notatkach z wersji Go 1.23, Go 1.24 wymaga j\u0105dra Linux w wersji 3.2 lub nowszej.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 jest ostatni\u0105 wersj\u0105, kt\u00f3ra b\u0119dzie dzia\u0142a\u0107 na macOS 11 Big Sur. Go 1.25 b\u0119dzie wymaga\u0107 macOS 12 Monterey lub nowszej.<\/p>\n<h3>WebAssembly<\/h3>\n<p>Dyrektywa kompilatora go:wasmexport zosta\u0142a dodana do program\u00f3w Go w celu eksportowania funkcji do hosta WebAssembly.<\/p>\n<p> <noindex><\/p>\n<p>W interfejsie systemu WebAssembly Preview 1 (GOOS=wasip1 GOARCH=wasm) Go 1.24 wspiera budowanie programu Go jako <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> poprzez wskazanie flagi kompilacji -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Wi\u0119cej typ\u00f3w teraz dopuszczonych jako typ argumentu lub wyniku dla funkcji go:wasmimport. W szczeg\u00f3lno\u015bci, bool, string, uintptr i wska\u017aniki do okre\u015blonych typ\u00f3w s\u0105 dozwolone (szczeg\u00f3\u0142y mo\u017cna zobaczy\u0107 w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">dokumentacji<\/a>), razem z typami ca\u0142kowitymi 32-bitowymi i 64-bitowymi oraz zmiennoprzecinkowymi, a tak\u017ce unsafe.Pointer, kt\u00f3re by\u0142y ju\u017c dozwolone. Te typy s\u0105 r\u00f3wnie\u017c dozwolone jako typy argumentu lub wyniku dla funkcji go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>Pliki wsparcia dla WebAssembly zosta\u0142y przeniesione do lib\/wasm z misc\/wasm.<\/p>\n<p>Pocz\u0105tkowy rozmiar pami\u0119ci zosta\u0142 znacznie zmniejszony, szczeg\u00f3lnie dla ma\u0142ych aplikacji WebAssembly.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>32-bitowy port windows\/arm (GOOS=windows GOARCH=arm) zosta\u0142 oznaczony jako uszkodzony. Szczeg\u00f3\u0142y w <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>\u0179r\u00f3d\u0142o: <a \ncontent=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.linux.org.ru\/news\/development\/17884044\">linux.org.ru<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u043e\u0432\u044b\u0439 \u0432\u044b\u043f\u0443\u0441\u043a \u044f\u0437\u044b\u043a\u0430 Go, \u0432\u0435\u0440\u0441\u0438\u044f 1.24, \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0441\u043f\u0443\u0441\u0442\u044f \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 Go 1.23. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0443\u043b\u0447\u0435\u0439\u043d\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430, \u0440\u0435\u043b\u0438\u0437 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 Go 1. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u044f\u0437\u044b\u043a\u0430 \u043e\u0436\u0438\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Go \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u044f\u0437\u044b\u043a\u0435 Go 1.24 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0438\u0430\u0441\u044b \u0442\u0438\u043f\u043e\u0432: \u0430\u043b\u0438\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":121951,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-121950","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/news\/go-1-24\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Go 1.24 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/news\/go-1-24\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-02-15T12:22:29+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Go 1.24 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Go 1.24 | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/news\/go-1-24","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2025-02-15T12:22:29+00:00","article:modified_time":"2025-02-15T12:22:29+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"121950","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 10:38:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2026-01-23 10:38:20","updated":"2026-01-23 10:38:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}