{"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\/de\/blog\/news\/go-1-24","title":{"rendered":"Gehe 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=\"Gehe 1.24\" src=\"\/wp-content\/uploads\/2025\/02\/6d6299421d83951d055782658814425f.jpg\" style=\"display:block;margin: 0 auto;\" \/>                   <\/a>                       <noindex>      <noindex><\/p>\n<p>Die neue Version von Go, Version 1.24, erscheint sechs Monate nach <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. Die meisten \u00c4nderungen betreffen die Implementierung des Toolchains, der Laufzeit und der Bibliotheken. Wie immer gew\u00e4hrleistet die Ver\u00f6ffentlichung <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">das Versprechen der Kompatibilit\u00e4t<\/a> Go 1. Die Entwickler der Sprache erwarten, dass fast alle Go-Programme weiterhin wie gewohnt kompiliert und funktionieren.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>\u00c4nderungen in der Sprache<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 unterst\u00fctzt jetzt vollst\u00e4ndig <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">generische Typalias<\/a>: Ein Typalias kann parametrisiert werden wie ein deklarierter Typ. Weitere Details finden Sie in der <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">Sprachspezifikation<\/a>. Momentan kann diese M\u00f6glichkeit durch das Setzen von GOEXPERIMENT=noaliastypeparams deaktiviert werden; jedoch wird die Option aliastypeparams in Go 1.25 entfernt.<\/p>\n<p><\/noindex> <\/p>\n<h2>Werkzeuge<\/h2>\n<h3>Der Befehl go<\/h3>\n<p> <noindex><\/p>\n<p>Go-Module k\u00f6nnen jetzt ausf\u00fchrbare Abh\u00e4ngigkeiten verfolgen, indem die Tool-Direktive in go.mod verwendet wird. Dies beseitigt die Notwendigkeit einer vorherigen Umgehungsl\u00f6sung, um Tools als leere Importe in die Datei hinzuzuf\u00fcgen, die normalerweise 'tools.go' genannt wird. Der Befehl go tool kann jetzt diese Tools zus\u00e4tzlich zu den mit Go gelieferten Tools ausf\u00fchren. Weitere Informationen sind zu finden in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">Dokumentation<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Das neue Flag -tool f\u00fcr go get f\u00fchrt zur Hinzuf\u00fcgung der Werkzeugdirektive zum aktuellen Modul f\u00fcr die angegebenen Pakete, zus\u00e4tzlich zur Hinzuf\u00fcgung der Abh\u00e4ngigkeitsdirektiven.<\/p>\n<p> <noindex><\/p>\n<p>Neu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">Meta-Muster tool<\/a> verweist auf alle Werkzeuge im aktuellen Modul. Dies kann verwendet werden, um sie alle \u00fcber go get tool zu aktualisieren oder um sie in Ihr GOBIN-Verzeichnis \u00fcber go install tool zu installieren.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ausf\u00fchrbare Dateien, die \u00fcber go run erstellt wurden, und das neue Verhalten von go tool werden jetzt im Go-Build-Cache zwischengespeichert. Dies optimiert wiederholte Ausf\u00fchrungen dank erh\u00f6htem Cache. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Die Befehle go build und go install akzeptieren jetzt das Flag -json, das Ausgaben und Build-Fehler als strukturierten JSON-Ausgabe auf der Standardausgabe meldet. Einzelheiten zum Format finden Sie in go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Dar\u00fcber hinaus meldet go test -json jetzt Ausgaben und Build-Fehler in JSON, vermischt mit dem Testresultat-JSON. Diese k\u00f6nnen aufgrund neuer Action-Typen unterschieden werden, aber wenn sie Problem im Testintegrationssystem verursachen, kann man auf die textuelle Build-Ausgabe \u00fcber <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">die Einstellung GODEBUG<\/a> gotestjsonbuildtext=1. zur\u00fcckgreifen.<\/p>\n<p><\/noindex> <\/p>\n<p>Die neue Umgebungsvariable GOAUTH bietet eine flexible M\u00f6glichkeit zur Autorisierung privater Modulimporte. Detaillierte Informationen finden Sie in go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>Der Befehl go build installiert jetzt <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">die Version des Hauptmoduls<\/a> im kompilierten Bin\u00e4rformat, basierend auf dem Tag und\/oder dem Commit des Versionskontrollsystems. Der Suffix +dirty wird hinzugef\u00fcgt, falls nicht kommittierte \u00c4nderungen vorhanden sind. Der Flag -buildvcs=false kann verwendet werden, um Versionierungshinweise aus dem Bin\u00e4rformat zu entfernen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Neu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-Einstellung<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> kann jetzt verwendet werden, um den Prozess der Auswahl des Toolchains im Befehl go zu verfolgen.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo unterst\u00fctzt neue Annotationen f\u00fcr C-Funktionen zur Verbesserung der Laufzeitleistung. #cgo noescape cFunctionName teilt dem Compiler mit, dass der an die C-Funktion cFunctionName \u00fcbergebene Speicher nicht entglitten darf. #cgo nocallback cFunctionName teilt dem Compiler mit, dass die C-Funktion cFunctionName keine Go-Funktionen zur\u00fcckruft. Weitere Informationen sind in der <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">Cgo-Dokumentation<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo lehnt derzeit kompilierte Aufrufe von C-Funktionen ab, die mehrere inkonsistente Deklarationen haben. Beispielsweise, wenn f sowohl als void f(int) als auch als void f(double) deklariert ist, wird cgo einen Fehler melden, anstatt eine falsche Aufrufsequenz f\u00fcr f(0) zu generieren. Neu in dieser Version ist die verbesserte Erkennung dieses Fehlerzustands, wenn inkompatible Deklarationen in verschiedenen Dateien auftreten. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>Das Tool objdump unterst\u00fctzt jetzt das Disassemblieren auf 64-Bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) und S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Der neue Tests-Analyzer meldet h\u00e4ufige Fehler in Testdeklarationen, Fuzzern, Benchmarks und Beispielen in Testpaketen, wie z. B. falsch formatierte Namen, ung\u00fcltige Signaturen oder Beispiele, die nicht existierende Identifikatoren dokumentieren. Einige dieser Fehler k\u00f6nnen dazu f\u00fchren, dass Tests nicht ausgef\u00fchrt werden.<\/p>\n<p> <noindex><\/p>\n<p>Der bestehende printf-Analyzer meldet jetzt Diagnosen f\u00fcr Aufrufe der Form fmt.Printf(s), wobei s ein String mit nicht konstantem Format ist, ohne weitere Argumente. Solche Aufrufe sind fast immer ein Fehler, da der Wert s das Zeichen % enthalten kann; verwenden Sie stattdessen fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Diese \u00dcberpr\u00fcfung neigt dazu, Funde im bestehenden Code zu machen, und wird daher nur angewendet, wenn die Sprachversion (festgelegt durch die Anweisung go im go.mod-Datei oder durch die Kommentare `\/\/go:build) mindestens Go 1.24 betr\u00e4gt, um zu vermeiden, dass bei der Aktualisierung auf das Go 1.24-Toolchain dauerhafte Integrationsfehler auftreten.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Der vorhandene buildtag-Analyser gibt nun Diagnosen aus, wenn es eine falsche <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">Build-Einschr\u00e4nkung der \u00e4lteren Version gibt.<\/a> Go-Direktive \/\/go:build. Zum Beispiel verweist \/\/go:build go1.23.1 auf ein Punkt-Release; stattdessen verwenden Sie \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Der vorhandene copylock-Analyser gibt nun Diagnosen aus, wenn eine Variable, die in einer dreifachen 'for'-Schleife deklariert wird, wie for i := iter(); done(i); i = next(i) { ... }, ein sync.Locker wie sync.Mutex enth\u00e4lt. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> \u00e4nderte das Verhalten solcher Schleifen so, dass jede Iteration eine neue Variable erstellt und Werte von der vorherigen Iteration kopiert; diese Kopie ist f\u00fcr Locks unsicher. <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>Das interne Bin\u00e4rprogramm cmd\/go und der Test-Caching-Mechanismus k\u00f6nnen jetzt von Kindprozessen implementiert werden, die \u00fcber ein JSON-Protokoll zwischen dem cmd\/go-Tool und dem Kindprozess kommunizieren, benannt durch die Umgebungsvariable GOCACHEPROG. Zuvor war dies durch GOEXPERIMENT m\u00f6glich. Details des Protokolls sind zu sehen in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">Dokumentation<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Ausf\u00fchrungszeit<\/h2>\n<p> <noindex><\/p>\n<p>Mehrere Leistungsverbesserungen in der Runtime haben die CPU-Overhead um durchschnittlich 2\u20133 % innerhalb einer Reihe von repr\u00e4sentativen Benchmarks reduziert. Die Ergebnisse k\u00f6nnen je nach Anwendung variieren. Diese Verbesserungen umfassen eine neue eingebaute Implementierung von Maps, die auf <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Schwedischen Tabellen<\/a>, effizienterem Speicher f\u00fcr kleine Objekte und einer neuen internen Runtime-Implementierung von Mutexen.<\/p>\n<p><\/noindex> <\/p>\n<p>Die neue eingebaute Implementierung von Maps und der neue interne Runtime-Mutex k\u00f6nnen w\u00e4hrend des Builds durch die Einstellungen GOEXPERIMENT=noswissmap und GOEXPERIMENT=nospinbitmutex deaktiviert werden.<\/p>\n<h2>Compiler<\/h2>\n<p>Der Compiler hat bereits das Definieren neuer Methoden mit Empf\u00e4ngertypen, die mit cgo generiert wurden, verboten, aber es war m\u00f6glich, dieses Verbot durch Typalias zu umgehen. Go 1.24 gibt jetzt immer einen Fehler aus, wenn der Empf\u00e4nger einen generierten cgo-Typ direkt oder indirekt (durch Typalias) bezeichnet.<\/p>\n<h2>Linker<\/h2>\n<p>Der Linker generiert jetzt standardm\u00e4\u00dfig eine GNU-Build-ID (Eintrag ELF NT_GNU_BUILD_ID) auf ELF-Plattformen und UUID (Mach-O LC_UUID-Boot-Befehl) auf macOS. Die Build-ID oder UUID wird aus der Build-ID von Go abgeleitet. Dies kann mit dem Linker-Flag -B none deaktiviert oder mit dem Linker-Flag -B 0xNNNN mit einem benutzerdefinierten hexadezimalen Wert \u00fcberschrieben werden.<\/p>\n<h2>Rollout<\/h2>\n<p> <noindex><\/p>\n<p>Wie in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">den Release-Notizen zu Go 1.22 angegeben<\/a>, Go 1.24 erfordert jetzt Go 1.22.6 oder sp\u00e4ter zum Kompilieren. Die Entwickler erwarten, dass Go 1.26 zum Kompilieren ein Patch-Release von Go 1.24 oder sp\u00e4ter ben\u00f6tigen wird.<\/p>\n<p><\/noindex> <\/p>\n<h2>Standardbibliothek<\/h2>\n<h3>Eingeschr\u00e4nkter Verzeichniszugriff auf das Dateisystem<\/h3>\n<p> <noindex><\/p>\n<p>Neuer Typ <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> erm\u00f6glicht es, Dateisystemoperationen innerhalb eines bestimmten Verzeichnisses auszuf\u00fchren.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> \u00f6ffnet ein Verzeichnis und gibt zur\u00fcck <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Die Methoden auf <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> arbeiten innerhalb dieses Verzeichnisses und erlauben keine Pfade, die auf Standorte au\u00dferhalb des Verzeichnisses verweisen, einschlie\u00dflich solcher, die symbolischen Links au\u00dferhalb des Verzeichnisses folgen. Die Methoden auf os.Root spiegeln die meisten Dateisystemoperationen wieder, die im os-Paket verf\u00fcgbar sind, einschlie\u00dflich zum Beispiel <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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Neue Benchmark-Funktion<\/h3>\n<p> <noindex><\/p>\n<p>Benchmarks k\u00f6nnen jetzt eine schnellere und weniger fehleranf\u00e4llige Methode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> f\u00fcr Iterationen in Benchmarks wie for b.Loop() { \u2026 } anstelle typischer Schleifenstrukturen mit b.N wie for range b.N verwenden. Das bietet zwei wesentliche Vorteile:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Die Benchmark-Funktion wird genau einmal pro -count ausgef\u00fchrt, wodurch zeitaufwendige Einrichtungsschritte und Aufr\u00e4umarbeiten nur einmal durchgef\u00fchrt werden.<\/li>\n<li>Die Parameter der Funktionsaufrufe und die Ergebnisse bleiben erhalten, was verhindert, dass der Compiler den Schleifenrumpf vollst\u00e4ndig optimiert.<\/li>\n<\/ul>\n<h3>Verbesserte Finalisierer<\/h3>\n<p> <noindex><\/p>\n<p>Eine neue Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> ist ein Abschlussmechanismus, der flexibler, effizienter und weniger fehleranf\u00e4llig ist als <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup h\u00e4ngt eine Aufr\u00e4umfunktion an ein Objekt, die ausgef\u00fchrt wird, sobald das Objekt unzug\u00e4nglich wird. Im Gegensatz zu SetFinalizer k\u00f6nnen jedoch mehrere Aufr\u00e4umfunktionen an ein einzelnes Objekt angeh\u00e4ngt werden, Aufr\u00e4umfunktionen k\u00f6nnen an interne Zeiger angeh\u00e4ngt werden, und Aufr\u00e4umfunktionen verursachen in der Regel keine Speicherlecks, wenn Objekte eine Schleife bilden, und sie verz\u00f6gern nicht die Freigabe des Objekts oder der Objekte, auf die es verweist. Neuer Code sollte AddCleanup vor SetFinalizer vorziehen.<\/p>\n<p><\/noindex> <\/p>\n<h3>Neues Paket weak<\/h3>\n<p> <noindex><\/p>\n<p>Neues Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> stellt schwache Zeiger bereit.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Schwache Zeiger sind ein niedrigstufiges Primitive, das bereitgestellt wird, um Strukturen zu erstellen, die den Speicher effektiv nutzen, wie z.B. schwache W\u00f6rterb\u00fccher zur Zuordnung von Werten, Kanonisierung von W\u00f6rterb\u00fcchern f\u00fcr alles, was nicht vom Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, und verschiedene Arten von Caches. Um diese Benutzerf\u00e4lle zu unterst\u00fctzen, bietet diese Version auch <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparable<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Ein neues Paket crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Neues Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementiert ML-KEM-768 und ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM ist ein post-quanten Schl\u00fcsselvereinbarungsmechanismus, der fr\u00fcher als Kyber bekannt war und in <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Neue Pakete crypto\/hkdf, crypto\/pbkdf2 und crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Neues Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementiert die auf HMAC basierende Schl\u00fcsselableitungsfunktion \"Extract-and-Expand\" HKDF, wie in <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Neues Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementiert die passwortbasierte Schl\u00fcsselableitungsfunktion PBKDF2, wie in <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Neues Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementiert die Hash-Funktion SHA-3 sowie SHAKE und cSHAKE-Funktionen f\u00fcr erweiterte Ausgaben, wie in <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Alle drei Pakete basieren auf zuvor existierenden Paketen von golang.org\/x\/crypto\/\u2026.<\/p>\n<h3>FIPS 140-3 Compliance<\/h3>\n<p> <noindex><\/p>\n<p>Diese Version enth\u00e4lt <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">einen neuen Satz von Mechanismen zur Gew\u00e4hrleistung der Compliance mit FIPS 140-3<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Das Krypto-Modul von Go ist eine Sammlung interner Pakete der Standardbibliothek, die transparent verwendet werden, um genehmigte FIPS 140-3 Algorithmen zu implementieren. Anwendungen erfordern keine \u00c4nderungen, um das Krypto-Modul von Go f\u00fcr genehmigte Algorithmen zu verwenden.<\/p>\n<p> <noindex><\/p>\n<p>Die neue Umgebungsvariable GOFIPS140 kann zur Auswahl der Version des Krypto-Moduls von Go verwendet werden, die in der Kompilierung verwendet werden soll. Neu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-Einstellung<\/a> fips140 kann zur Aktivierung des Modus FIPS 140-3 zur Laufzeit verwendet werden.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 enth\u00e4lt die Version v1.0.0 des Krypto-Moduls von Go, das derzeit mit einem akkreditierten CMVP-Labor getestet wird.<\/p>\n<h3>Ein neues experimentelles Paket testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Ein neues experimentelles Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> bietet Unterst\u00fctzung f\u00fcr das Testen von konkurrierendem Code.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> f\u00fchrt eine Gruppe von Goroutinen in einer isolierten \"Blase\" aus. In der Blase operieren die Funktionen des Pakets <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> auf falschen Uhren.<\/li>\n<li>Funktionen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> wartet darauf, dass alle Goroutinen im aktuellen Blasenspeicher blockiert sind.<\/li>\n<\/ul>\n<p>Details k\u00f6nnen in der Dokumentation des Pakets eingesehen werden.<\/p>\n<p> <noindex><\/p>\n<p>Das Paket synctest ist experimentell und muss durch Setzen von GOEXPERIMENT=synctest aktiviert werden. Die API des Pakets kann sich in zuk\u00fcnftigen Versionen \u00e4ndern. In <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> k\u00f6nnen weitere Details eingesehen und Feedback gegeben werden.<\/p>\n<p><\/noindex> <\/p>\n<h3>Kleine \u00c4nderungen in der Bibliothek<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Implementierungen (*Writer.AddFS) im archive\/zip und archive\/tar schreiben jetzt das Verzeichnis-Header f\u00fcr leere Verzeichnisse.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> f\u00fcgt mehrere Funktionen hinzu, die mit Iteratoren arbeiten:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> gibt einen Iterator \u00fcber durch neue Zeilen getrennte Zeichenfolgen im Byte-Slice zur\u00fcck.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> gibt einen Iterator \u00fcber alle Teilslices des Byte-Slices zur\u00fcck, das durch einen Separator getrennt ist.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> gibt einen Iterator \u00fcber Teilslices des Byte-Slices zur\u00fcck, das nach jedem Auftreten des Separators getrennt ist.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> gibt einen Iterator \u00fcber Teilslices des Byte-Slices zur\u00fcck, die um Sequenzen von Leerzeichen herum definiert sind. <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> gibt einen Iterator \u00fcber Teilslices des Byte-Slices zur\u00fcck, die um Sequenzen von Unicode-Codepunkten herum definiert sind, die einem Pr\u00e4dikat entsprechen.<\/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>Der zur\u00fcckgegebene Wert <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> implementiert nicht mehr die Methoden NewCTR, NewGCM, NewCBCEncrypter und NewCBCDecrypter. Diese Methoden waren nicht dokumentiert und nicht auf allen Architekturen verf\u00fcgbar. Jetzt ist der Wert <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> muss direkt an die entsprechenden Funktionen \u00fcbergeben werden <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. Derzeit \u00fcberpr\u00fcft crypto\/cipher immer noch diese Methoden f\u00fcr Block-Werte, auch wenn sie nicht mehr von der Standardbibliothek unterst\u00fctzt werden.<\/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>Eine neue Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> gibt zur\u00fcck <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, der AES-GCM implementiert, indem er w\u00e4hrend Seal eine zuf\u00e4llige Einmal-Nummer generiert und sie am Anfang des verschl\u00fcsselten Textes hinzuf\u00fcgt.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementierung <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, der zur\u00fcckgegeben wird <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> in Kombination mit <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> jetzt mehrere Male schneller auf amd64 und 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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> sind jetzt als veraltet deklariert. Die Modi OFB und CFB sind nicht authentifiziert, was aktiven Angriffen erm\u00f6glicht, den Klartext zu manipulieren und wiederherzustellen. Anwendungen wird empfohlen, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> stattdessen zu verwenden. Wenn ein nicht authentifizierter Modus <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> notwendig ist, kann <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> stattdessen verwendet werden.<\/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> erzeugt jetzt eine deterministische Signatur gem\u00e4\u00df <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, wenn die Zufallsquelle nil ist.<\/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>Der zur\u00fcckgegebene Wert <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, implementiert jetzt auch die Schnittstelle <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>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Read\">Lesen<\/a> garantiert jetzt das Fehlen von Fehlern. Wenn Read w\u00e4hrend des Lesens auf einen Fehler st\u00f6\u00dft <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, wird das Programm sofort beendet. Beachten Sie, dass der Standard-Reader dokumentiert ist, immer erfolgreich zu arbeiten, daher sollte diese \u00c4nderung nur Programme betreffen, die die Variable Reader \u00fcberschreiben. Eine Ausnahme bilden Linux-Kernel vor Version 3.17, in denen der Standard-Reader immer noch \/dev\/urandom \u00f6ffnet und fehlschlagen kann.<\/p>\n<p><\/noindex> <\/p>\n<p>Unter Linux 6.11 und h\u00f6her verwendet der Reader jetzt den Systemaufruf getrandom \u00fcber vDSO. Dies ist mehrere Male schneller, normalerweise f\u00fcr kleine Lesevorg\u00e4nge.<\/p>\n<p>Unter OpenBSD verwendet der Reader jetzt arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Eine neue Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Text<\/a> kann jetzt kryptografisch sichere Zufallszeichenfolgen generieren.<\/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> gibt jetzt einen Fehler zur\u00fcck, wenn ein Schl\u00fcssel mit weniger als 1024 Bit angefordert wird. Alle Methoden Sign, Verify, Encrypt und Decrypt geben jetzt einen Fehler zur\u00fcck, wenn sie mit einem Schl\u00fcssel kleiner als 1024 Bit verwendet werden. Solche Schl\u00fcssel sind unsicher und sollten nicht genutzt werden. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-Konfiguration<\/a> rsa1024min=0 stellt das alte Verhalten wieder her, aber die Go-Entwickler empfehlen dies nur bei Bedarf und nur in Tests, indem man z. B. die Zeile \/\/go:debug rsa1024min=0 in die Testdatei einf\u00fcgt. Neu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">Beispiel<\/a> GenerateKey stellt einen einfach zu verwendenden 2024-Bit-Testschl\u00fcssel bereit.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Es ist jetzt sicherer und effizienter, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> bis <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute ist jetzt schneller bei teilweise gef\u00fcllten <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, z. B. beim Abrufen des Schl\u00fcssels aus JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Das Paket verwirft jetzt mehr ung\u00fcltige Schl\u00fcssel, auch wenn Validate nicht aufgerufen wird, und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> kann jetzt neue Fehler f\u00fcr fehlerhafte Zufallsquellen zur\u00fcckgeben. Die Felder <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> Strukturen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> werden jetzt verwendet und validiert, selbst wenn einige Werte fehlen. Auch in crypto\/x509 wurden \u00c4nderungen an der Analyse und dem Abruf von RSA-Schl\u00fcsseln vorgenommen, die im Folgenden beschrieben werden.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> unterst\u00fctzen jetzt SHA-512\/224, SHA-512\/256 und SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> verwendet jetzt eine etwas andere Methode zur Erzeugung der privaten Exponenten (Karmichels Funktion anstelle der Eulerschen Funktion). Seltene Anwendungen, die Schl\u00fcssel nur aus Primzahlen neu erstellen, k\u00f6nnen unterschiedliche, aber kompatible Ergebnisse erzeugen.<\/p>\n<p><\/noindex> <\/p>\n<p>Operationen mit \u00f6ffentlichen und privaten Schl\u00fcsseln sind jetzt bis zu zweimal schneller auf wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: Der Wert, der zur\u00fcckgegeben wird von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> implementiert jetzt ebenfalls das Interface <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>: Die Werte, die zur\u00fcckgegeben werden von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> implementiert jetzt ebenfalls das Interface <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>: Die Werte, die zur\u00fcckgegeben werden von <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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, implementiert jetzt ebenfalls das Interface <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>Eine neue Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> erm\u00f6glicht es dem Benutzer, eine Funktion mit aktivierten architekturspezifischen Funktionen auszuf\u00fchren, die garantieren, dass bestimmte Anweisungen bez\u00fcglich der Zeit der Datenwerte unver\u00e4ndert bleiben. Dies kann verwendet werden, um sicherzustellen, dass der f\u00fcr konstante Zeit entwickelte Code nicht durch Prozessor-Level-Funktionen so optimiert wurde, dass er in variabler Zeit arbeitet. Momentan verwendet WithDataIndependentTiming das Bit PSTATE.DIT auf arm64 und f\u00fchrt auf allen anderen Architekturen nichts aus. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-Konfiguration<\/a> dataindependenttiming=1 aktiviert den DIT-Modus f\u00fcr das gesamte Go-Programm.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ausgabe <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> muss entweder vollst\u00e4ndig oder nicht mit der Eingabe \u00fcberlappen. Das vorherige Verhalten war unbestimmt, jetzt wird XORBytes eine Panik ausl\u00f6sen.<\/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>Der TLS-Server unterst\u00fctzt jetzt den Encrypted Client Hello (ECH). Diese Funktion kann durch das Ausf\u00fcllen des Feldes aktiviert werden. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ein neuer post-quanten Schl\u00fcssel-Austauschmechanismus <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> wird jetzt unterst\u00fctzt und ist standardm\u00e4\u00dfig aktiviert, wenn <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> nil ist. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-Konfiguration<\/a> tlsmlkem=0 gibt den Standard zur\u00fcck.<\/p>\n<p><\/noindex> <\/p>\n<p>Die Unterst\u00fctzung f\u00fcr den experimentellen Schl\u00fcssel-Austausch X25519Kyber768Draft00 wurde entfernt.<\/p>\n<p> <noindex><\/p>\n<p>Der Schl\u00fcssel-Austauschprozess wird jetzt vollst\u00e4ndig im Paket crypto\/tls behandelt. Die Reihenfolge <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> wird jetzt ignoriert, und der Inhalt wird nur verwendet, um zu bestimmen, welche Schl\u00fcssel-Austausche aktiviert werden sollen, wenn das Feld ausgef\u00fcllt ist.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Das neue Feld <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> listet die Liste der von der Client Hello-Nachricht empfangenen Erweiterungs-IDs auf. Dies kann n\u00fctzlich sein, um TLS-Client-Fingerabdr\u00fccke zu erstellen.<\/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\">GODEBUG-Konfiguration<\/a> x509sha1 wurde entfernt. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> unterst\u00fctzt keine auf SHA-1 basierenden Signaturen mehr.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> implementiert jetzt die Schnittstellen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Das Standardfeld f\u00fcr Zertifikatsrichtlinien wurde ge\u00e4ndert von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> auf <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Beim Parsen von Zertifikaten werden beide Felder ausgef\u00fcllt, aber bei der Erstellung von Zertifikatsrichtlinien werden diese aus dem Feld Certificate.Policies anstelle von Certificate.PolicyIdentifiers \u00fcbernommen. Diese \u00c4nderung kann durch <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">die Einstellung GODEBUG<\/a> x509usepolicies=0 zur\u00fcckgesetzt werden.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#CreateCertificate\">CreateCertificate<\/a> wird jetzt eine Seriennummer generieren, die eine RFC 5280-konforme Methode verwendet, wenn das Vorlagelfeld <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil ist, anstatt einen Fehler auszul\u00f6sen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> unterst\u00fctzt jetzt die Validierung von Richtlinien, wie in RFC 5280 und RFC 9618 definiert. Das neue Feld <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> kann auf eine akzeptable Menge von Richtlinien <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs gesetzt werden.<\/a>. Nur Zertifikatketten mit g\u00fcltigen Politikfeldern werden zur\u00fcckgegeben aus <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> gibt jetzt einen Fehler zur\u00fcck, anstatt den falschen RSA-Schl\u00fcssel zu extrahieren. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> f\u00fchlt keinen Fehler zur\u00fcck und sein Verhalten bei falschen Schl\u00fcsseln bleibt weiterhin undefiniert.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> verwendet jetzt und validiert kodierte CRT-Werte, sodass falsche RSA-Schl\u00fcssel, die zuvor akzeptiert wurden, abgelehnt werden k\u00f6nnen. Die Verwendung <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">der GODEBUG-Einstellungen<\/a> x509rsacrt=0 kehrt zur Neuberechnung der CRT-Werte zur\u00fcck.<\/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>Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> f\u00fcgt Unterst\u00fctzung f\u00fcr die Verarbeitung von Versions-Symbolen in dynamischen ELF-Dateien (Executable and Linkable Format) hinzu. Neue Methode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> gibt eine Liste der dynamischen Versionen zur\u00fcck, die in der ELF-Datei definiert sind. Neue Methode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> gibt eine Liste der dynamischen Versionen zur\u00fcck, die von dieser ELF-Datei ben\u00f6tigt werden und die in anderen ELF-Objekten definiert sind. Schlie\u00dflich zeigen die neuen Felder <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> die Version des Symbols an.<\/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>Zwei neue Schnittstellen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> wurden eingef\u00fchrt, um die textuelle oder bin\u00e4re Darstellung eines Objekts zu einem Byte-Slice hinzuzuf\u00fcgen. Diese Schnittstellen bieten die gleiche Funktionalit\u00e4t wie <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, aber anstatt jedes Mal einen neuen Slice zu erstellen, f\u00fcgen sie die Daten direkt in den vorhandenen Slice ein. Diese Schnittstellen werden jetzt von Typen der Standardbibliothek implementiert, die bereits TextMarshaler und\/oder BinaryMarshaler implementieren.<\/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>Beim Aufbau wird das Strukturfeld mit der neuen Option omitzero im Tag des Strukturfeldes weggelassen, wenn sein Wert null ist. Wenn der Typ des Feldes die Methode IsZero() bool hat, wird sie verwendet, um festzustellen, ob der Wert null ist. Andernfalls ist der Wert null, wenn er <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">null ist f\u00fcr seinen Typ<\/a>. Der Tag omitzero ist \u00fcbersichtlicher und weniger fehleranf\u00e4llig als omitempty, wenn die Absicht darin besteht, null-Werte zu \u00fcberspringen. Insbesondere, im Gegensatz zu omitempty l\u00e4sst omitzero null <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> -Werte weg, was eine h\u00e4ufige Quelle von Problemen ist.<\/p>\n<p><\/noindex> <\/p>\n<p>Wenn sowohl omitempty als auch omitzero festgelegt sind, wird das Feld weggelassen, wenn der Wert leer oder null ist (oder beides gleichzeitig).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> enth\u00e4lt jetzt eingebettete Strukturen, um detailliertere Fehlermeldungen bereitzustellen.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Alle Datenstrukturen go\/types, die Methodenpaare wie Len() int und At(int) T darstellen, haben jetzt auch Methoden, die Iteratoren zur\u00fcckgeben, was die Vereinfachung des Codes wie folgt erm\u00f6glicht:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>F\u00fcr dieses:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>Methoden: <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>: Der Wert, der zur\u00fcckgegeben wird von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Neu<\/a>, implementiert jetzt auch die Schnittstelle <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>: Die Werte, die zur\u00fcckgegeben werden von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Neu<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, implementiert jetzt ebenfalls das Interface <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>: Der Wert, der zur\u00fcckgegeben wird von <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Neu<\/a>, implementiert jetzt auch die Schnittstelle <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>: Die Werte, die zur\u00fcckgegeben werden von <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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, implementiert jetzt ebenfalls das Interface <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>: neue Funktionen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> k\u00f6nnen den Hash eines beliebigen vergleichbaren Wertes berechnen. Dies erm\u00f6glicht das Hashing von allem, was als Schl\u00fcssel f\u00fcr ein Go-W\u00f6rterbuch verwendet werden kann.<\/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>Neu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> ist ein Handler, der niemals aktiviert wird und immer seine Ausgabe verwirft.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Level<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> implementieren jetzt das Interface <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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> implementieren jetzt das Interface <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>: Aufrufe der veralteten High-Level-Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> haben keinen Effekt mehr. Um das alte Verhalten wiederherzustellen, kann die Einstellung <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">die Einstellung GODEBUG<\/a> randseednop=0 verwendet werden. Mehr Kontext in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">Angebot 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> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> implementieren jetzt das Interface <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\">ListenConfig<\/a> verwendet jetzt MPTCP standardm\u00e4\u00dfig auf Systemen, wo dies unterst\u00fctzt wird (vorerst nur Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> implementieren jetzt das Interface <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>Die Grenze wurde ge\u00e4ndert <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> f\u00fcr eintreffende Informationsantworten 1xx auf Anfragen. Fr\u00fcher stoppte dies die Anfrage und gab einen Fehler zur\u00fcck, nachdem mehr als 5 Antworten 1xx erhalten wurden. Jetzt gibt es nur einen Fehler, wenn die Gesamtgr\u00f6\u00dfe aller 1xx-Antworten die Konfigurationseinstellung \u00fcberschreitet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Dar\u00fcber hinaus gibt es jetzt keine Begrenzung f\u00fcr die Gesamtzahl der Antworten 1xx, wenn der Request einen Hook zur Verfolgung hat <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, Kann der Hook Got1xxResponse einen Fehler zur\u00fcckgeben, um die Anfrage zu stoppen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Server<\/a> haben jetzt ein HTTP2-Feld, das die Konfiguration der HTTP\/2-Protokolleinstellungen erlaubt.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Neue Felder <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> bieten einen einfachen Weg, zu konfigurieren, welche Protokolle der HTTP-Server oder -Client verwendet.<\/p>\n<p><\/noindex> <\/p>\n<p>Server und Client k\u00f6nnen konfiguriert werden, um unverschl\u00fcsselte HTTP\/2-Verbindungen zu unterst\u00fctzen.<\/p>\n<p> <noindex><\/p>\n<p>Wenn <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> UnencrypterHTTP2 enth\u00e4lt, akzeptiert der Server HTTP\/2-Verbindungen auf unverschl\u00fcsselten Ports. Der Server kann sowohl HTTP\/1 als auch unverschl\u00fcsseltes HTTP\/2 an demselben Port akzeptieren.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Wenn <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> enth\u00e4lt UnencryptedHTTP2 und enth\u00e4lt kein HTTP1, der Transport verwendet unverschl\u00fcsseltes HTTP\/2 f\u00fcr Adressen <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Wenn der Transport so konfiguriert ist, dass er sowohl HTTP\/1 als auch unverschl\u00fcsseltes HTTP\/2 verwendet, wird er HTTP\/1 verwenden.<\/p>\n<p><\/noindex> <\/p>\n<p>Die Unterst\u00fctzung f\u00fcr unverschl\u00fcsseltes HTTP\/2 verwendet \u201eHTTP\/2 mit vorherigem Wissen\u201c (RFC 9113, Abschnitt 3.3). Der veraltete Header \u201eUpgrade: h2c\u201c wird nicht unterst\u00fctzt.<\/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\">Addr<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#AddrPort\">AddrPort<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> implementieren jetzt Schnittstellen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> und <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> implementiert jetzt ebenfalls das Interface <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>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktuell<\/a> kann jetzt im Windows Nano Server verwendet werden. Die Implementierung wurde aktualisiert, um die Verwendung von Funktionen aus der NetApi32-Bibliothek zu vermeiden, die im Nano Server nicht vorhanden ist.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktuell<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> unterst\u00fctzen jetzt die folgenden integrierten Dienstkonten f\u00fcr Benutzer:<\/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>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktuell<\/a> wurde erheblich beschleunigt, wenn der aktuelle Benutzer mit einer langsamen Dom\u00e4ne verbunden ist, was f\u00fcr viele Unternehmensbenutzer \u00fcblich ist. Die neue Implementierungsleistung liegt jetzt im Millisekundenbereich, im Vergleich zur vorherigen Implementierung, die mehrere Sekunden oder sogar Minuten f\u00fcr den Abschluss ben\u00f6tigte.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>In Windows <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Aktuell<\/a> gibt jetzt den Benutzer des Prozessbesitzers zur\u00fcck, wenn der aktuelle Thread sich als ein anderer Benutzer ausgibt. Fr\u00fcher gab es einen Fehler zur\u00fcck.<\/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> implementieren jetzt das Interface <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\/\">laufzeit<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> wurde jetzt als veraltet erkl\u00e4rt. In neuem Code sollte die Verwendung des Systempfads zur Bestimmung des Bin\u00e4rdateipfads f\u00fcr \u201ego\u201c bevorzugt werden, und go env GOROOT sollte verwendet werden, um GOROOT zu bestimmen.<\/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>Paket <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> f\u00fcgt mehrere Funktionen zur Arbeit mit Iteratoren hinzu:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> gibt einen Iterator \u00fcber die durch neue Zeilen getrennten Zeilen in einer Zeichenkette zur\u00fcck.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> gibt einen Iterator \u00fcber alle Teilzeichenfolgen der Zeichenkette zur\u00fcck, die durch einen Separator getrennt sind.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> gibt einen Iterator \u00fcber Teilzeichenfolgen der Zeichenkette zur\u00fcck, die nach jedem Auftreten des Separators getrennt sind.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> gibt einen Iterator \u00fcber Teilzeichenfolgen der Zeichenkette zur\u00fcck, die um Sequenzen von Leerzeichen herum definiert sind, wie festgelegt.<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> gibt einen Iterator \u00fcber Teilzeichenfolgen der Zeichenkette zur\u00fcck, die um Sequenzen von Unicode-Codepunkten herum definiert sind, die dem Pr\u00e4dikat entsprechen.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">sync<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementierung <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> wurde modifiziert und verbessert die Leistung, insbesondere bei \u00c4nderungen am W\u00f6rterbuch. Beispielsweise ist es weniger wahrscheinlich, dass \u00c4nderungen an nicht \u00fcberlappenden Mengen in gro\u00dfen W\u00f6rterb\u00fcchern miteinander konkurrieren, und es ist keine Aufw\u00e4rmzeit mehr erforderlich, um niedrige Wettbewerbslasten im W\u00f6rterbuch zu erreichen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Wenn Sie auf Probleme sto\u00dfen, setzen Sie GOEXPERIMENT=nosynchashtriemap w\u00e4hrend des Builds, um zur alten Implementierung zur\u00fcckzukehren, und bitte <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">das Problemmeldungsformular ausf\u00fcllen<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/\">Testen<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Neue Methoden <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> geben den Kontext zur\u00fcck, der nach Abschluss des Tests und vor der Ausf\u00fchrung der Aufr\u00e4umfunktionen ung\u00fcltig wird.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Neue Methoden <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> k\u00f6nnen verwendet werden, um das Arbeitsverzeichnis w\u00e4hrend der Ausf\u00fchrung des Tests oder Benchmarks zu \u00e4ndern.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Vorlagen unterst\u00fctzen jetzt range-over-func und 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\">Zeit<\/a> implementiert jetzt die Schnittstellen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> und <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Ports<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Wie zuvor <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">angek\u00fcndigt<\/a> in den Release-Notizen von Go 1.23, Go 1.24 ben\u00f6tigt einen Linux-Kernel der Version 3.2 oder sp\u00e4ter.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 ist die letzte Version, die auf macOS 11 Big Sur l\u00e4uft. Go 1.25 wird macOS 12 Monterey oder neuer erfordern.<\/p>\n<h3>WebAssembly<\/h3>\n<p>Die Compiler-Direktive go:wasmexport wurde in Go-Programmen hinzugef\u00fcgt, um Funktionen in den WebAssembly-Host zu exportieren.<\/p>\n<p> <noindex><\/p>\n<p>In der WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) unterst\u00fctzt Go 1.24 den Build von Go-Programmen als <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> durch Angabe des Build-Flags -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Mehr Typen sind jetzt als Argument- oder R\u00fcckgabetypen f\u00fcr go:wasmimport-Funktionen erlaubt. Insbesondere bool, string, uintptr und Zeiger auf bestimmte Typen sind erlaubt (Details siehe in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">Dokumentation<\/a>), zusammen mit 32-Bit und 64-Bit Ganzzahlen und Flie\u00dfkommawerten, sowie unsafe.Pointer, die bereits erlaubt sind. Diese Typen sind auch als Argument- oder R\u00fcckgabetypen f\u00fcr go:wasmexport-Funktionen erlaubt.<\/p>\n<p><\/noindex> <\/p>\n<p>Die Unterst\u00fctzungsdateien f\u00fcr WebAssembly wurden von misc\/wasm nach lib\/wasm verschoben.<\/p>\n<p>Die urspr\u00fcngliche Speichermenge wurde erheblich reduziert, insbesondere f\u00fcr kleine WebAssembly-Anwendungen.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>Der 32-Bit Port windows\/arm (GOOS=windows GOARCH=arm) wurde als defekt markiert. Einzelheiten in <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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\udd47Gehe zu 1.24 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/de\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}