{"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\/da\/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>Den nye version af Go-sproget, version 1.24, udkommer seks m\u00e5neder efter <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23\">Go 1.23<\/a>. De fleste \u00e6ndringer vedr\u00f8rer implementeringen af v\u00e6rkt\u00f8jsk\u00e6den, runtime og biblioteker. Som altid leverer udgivelsen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1compat\">l\u00f8ftet om kompatibilitet<\/a> Go 1. Udviklerne bag sproget forventer, at n\u00e6sten alle Go-programmer fortsat kan kompileres og k\u00f8re som f\u00f8r.<\/p>\n<p><\/noindex><\/noindex>  <\/p>\n<h2>\u00c6ndringer i sproget<\/h2>\n<p> <noindex><\/p>\n<p>Go 1.24 underst\u00f8tter nu fuldt ud <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/46477\">generiske typealias<\/a>: et typealias kan parameteriseres som en erkl\u00e6ret type. Yderligere oplysninger findes i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#Alias_declarations\">sprog-specifikationen<\/a>. Indtil videre kan muligheden deaktiveres ved at indstille GOEXPERIMENT=noaliastypeparams; dog vil indstillingen aliastypeparams blive fjernet i Go 1.25.<\/p>\n<p><\/noindex> <\/p>\n<h2>V\u00e6rkt\u00f8jer<\/h2>\n<h3>Go-kommandoen<\/h3>\n<p> <noindex><\/p>\n<p>Go-moduler kan nu holde styr p\u00e5 k\u00f8rende afh\u00e6ngigheder ved at bruge v\u00e6rkt\u00f8jsdirektivet i go.mod. Dette fjerner behovet for den tidligere workaround, hvor v\u00e6rkt\u00f8jer blev tilf\u00f8jet som tomme importer i filen, ofte kaldet \u201ctools.go\u201d. Go-v\u00e6rkt\u00f8jskommandoen kan nu k\u00f8re disse v\u00e6rkt\u00f8jer sammen med de v\u00e6rkt\u00f8jer, der leveres med Go. Flere oplysninger kan ses i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/modules\/managing-dependencies#tools\">dokumentationen<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Den nye -tool-flag for go get tilf\u00f8jer v\u00e6rkt\u00f8jsdirektivet til den aktuelle modul for de angivne pakker ud over at tilf\u00f8je kravsdirektivet.<\/p>\n<p> <noindex><\/p>\n<p>Ny <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go#hdr-Package_lists_and_patterns\">metam\u00f8nster tool<\/a> henviser til alle v\u00e6rkt\u00f8jer i den aktuelle modul. Dette kan bruges til at opdatere dem alle via go get tool eller til at installere dem i din GOBIN-mappe via go install tool.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>K\u00f8rbare filer oprettet med go run og den nye adf\u00e6rd for go tool bliver nu cache't i Go's bygningscache. Dette g\u00f8r gentagne opstarter hurtigere takket v\u00e6re den \u00f8gede cache. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/69290\">#69290<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Go build- og go install-kommandoerne accepterer nu flaget -json, som rapporterer output og fejl i bygningen som struktureret JSON-output til standardoutput. Detaljer om formatet kan ses i go help buildjson.<\/p>\n<p> <noindex><\/p>\n<p>Desuden rapporterer go test -json nu output og fejl i bygningen i JSON, blandet med JSON'ens testresultater. De kan adskilles ved de nye Action-typer, men hvis de for\u00e5rsager problemer i testsystemintegrationen, kan man g\u00e5 tilbage til tekstoutputet fra bygningen via <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillingen<\/a> gotestjsonbuildtext=1.<\/p>\n<p><\/noindex> <\/p>\n<p>Den nye milj\u00f8variabel GOAUTH giver en fleksibel m\u00e5de at autorisere private modultr\u00e6k p\u00e5. Se detaljer i go help goauth.<\/p>\n<p> <noindex><\/p>\n<p>Go build-kommandoen installer nu <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/debug#BuildInfo.Main\">versionen af den prim\u00e6re modul<\/a> i den kompilerede bin\u00e6rfil, baseret p\u00e5 tagget og\/eller committet i versionskontrolsystemet. Suffikset +dirty vil blive tilf\u00f8jet, hvis der er ucommitterede \u00e6ndringer. Flaget -buildvcs=false kan bruges til at udelade versionskontroloplysninger fra bin\u00e6rfilen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Ny <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">indstilling GODEBUG<\/a> <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/toolchain#select\">toolchaintrace=1<\/a> kan nu bruges til at overv\u00e5ge procesvalget af toolchain i go-teamet.<\/p>\n<p><\/noindex> <\/p>\n<h3>Cgo<\/h3>\n<p> <noindex><\/p>\n<p>Cgo underst\u00f8tter nye annotationer for C-funktioner for at forbedre ydeevnen i runtime. #cgo noescape cFunctionName fort\u00e6ller compiler, at den hukommelse, der overf\u00f8res til C-funktionen cFunctionName, ikke vil forsvinde. #cgo nocallback cFunctionName signalerer til compileren, at C-funktionen cFunctionName ikke tilbagekalder nogen Go-funktioner. Mere information kan ses i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/cgo#hdr-Optimizing_calls_of_C_code\">cgo-dokumentationen<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Cgo n\u00e6gter i \u00f8jeblikket at kompilere kald til C-funktioner, der har flere uforenelige erkl\u00e6ringer. For eksempel, hvis f er erkl\u00e6ret som b\u00e5de void f(int) og void f(double), vil cgo returnere en fejl i stedet for at generere en forkert opkaldssekvens f(0). Nyttigt i denne udgivelse er forbedret detektion af denne fejltilstand, n\u00e5r uforenelige erkl\u00e6ringer vises i forskellige filer. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67699\">#67699<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Objdump<\/h3>\n<p>Objdump-v\u00e6rkt\u00f8jet underst\u00f8tter nu disassemblage p\u00e5 64-bit LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) og S390X (GOARCH=s390x).<\/p>\n<h3>Vet<\/h3>\n<p>Den nye tests-analyzator rapporterer almindelige fejl i testdeclarationer, fuzzere, benchmarks og eksempler i testpakker, s\u00e5som forkert formaterede navne, forkerte signaturer eller eksempler, der dokumenterer ikke-eksisterende identifikatorer. Nogle af disse fejl kan f\u00f8re til, at tests ikke k\u00f8rer.<\/p>\n<p> <noindex><\/p>\n<p>Den eksisterende printf-analyzator rapporterer nu diagnose for opkald i formen fmt.Printf(s), hvor s er en ikke-konstant formatstreng, uden andre argumenter. S\u00e5danne opkald er n\u00e6sten altid en fejl, da v\u00e6rdien s kan indeholde %; brug i stedet fmt.Print. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/60529\">60529<\/a>. Denne kontrol har tendens til at finde fejl i eksisterende kode, og anvendes derfor kun, n\u00e5r sprogversionen (som angivet af go-directivet i go.mod-fil eller kommentarer `\/\/go:build) mindst er Go 1.24 for at undg\u00e5 at for\u00e5rsage fejl under kontinuerlig integration ved opgradering til Go 1.24 toolchain.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Den eksisterende buildtag-analyse rapporterer nu diagnostik, n\u00e5r der er en forkert <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/go#hdr-Build_constraints\">byggegr\u00e6nsen for en nyere version<\/a> Go i direktivet \/\/go:build. For eksempel refererer \/\/go:build go1.23.1 til et patchrelease; brug i stedet \/\/go:build go1.23. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/64127\">#64127<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Den eksisterende copylock-analyse rapporterer nu diagnostik, n\u00e5r en variabel, der er erkl\u00e6ret i en triple 'for'-l\u00f8kke, som for i := iter(); done(i); i = next(i) { ... }, indeholder sync.Locker, s\u00e5som sync.Mutex. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#language\">Go 1.22<\/a> \u00e6ndrede adf\u00e6rden for s\u00e5danne l\u00f8kker til at oprette en ny variabel for hver iteration, ved at kopiere v\u00e6rdier fra den foreg\u00e5ende iteration; denne kopiering er usikker for l\u00e5s. <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>Det interne bin\u00e6re cmd\/go og testcache-mekanismen kan nu implementeres af underprocesser, der implementerer JSON-protokollen mellem cmd\/go-v\u00e6rkt\u00f8jet og en underproces, der er navngivet i milj\u00f8variablen GOCACHEPROG. Tidligere var det under GOEXPERIMENT. Protokoloplysninger kan ses i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/cmd\/go\/internal\/cacheprog\">dokumentationen<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Udf\u00f8relsestid<\/h2>\n<p> <noindex><\/p>\n<p>Flere ydeevneforbedringer i runtime har reduceret CPU-overhead med 2-3% i gennemsnit blandt et s\u00e6t repr\u00e6sentative benchmarks. Resultaterne kan variere afh\u00e6ngigt af applikationen. Disse forbedringer inkluderer en ny indbygget map-implementering baseret p\u00e5 <a rel=\"nofollow\" href=\"https:\/\/abseil.io\/about\/design\/swisstables\">Svenske Tabel<\/a>, mere effektiv allokering af hukommelse til sm\u00e5 objekter og en ny intern runtime-muteximplementering.<\/p>\n<p><\/noindex> <\/p>\n<p>Den nye indbyggede map-implementering og den nye interne runtime-mutex kan deaktiveres ved at s\u00e6tte GOEXPERIMENT=noswissmap og GOEXPERIMENT=nospinbitmutex under bygningen henholdsvis.<\/p>\n<h2>Kompilator<\/h2>\n<p>Kompilatoren har allerede forbudt at definere nye metoder med modtagertyper, der er genereret af cgo, men det var muligt at omg\u00e5 denne begr\u00e6nsning gennem typealias. Go 1.24 rapporterer nu altid en fejl, hvis modtageren angiver en genereret cgo-typen direkte eller indirekte (gennem typealias).<\/p>\n<h2>Linker<\/h2>\n<p>Linkeren genererer nu et GNU build-id (ELF NT_GNU_BUILD_ID post) p\u00e5 ELF-platforme og UUID (Mach-O LC_UUID kommando) p\u00e5 macOS som standard. Build-id eller UUID genereres fra Go-build-id'en. Dette kan deaktiveres med linkerflaget -B none eller overskrives med linkerflaget -B 0xNNNN med et brugerdefineret hex-v\u00e6rdi.<\/p>\n<h2>Rulning<\/h2>\n<p> <noindex><\/p>\n<p>Som angivet i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.22#bootstrap\">Go 1.22' s udgivelsesnoter<\/a>, Go 1.24 kr\u00e6ver nu Go 1.22.6 eller nyere for at kunne bruges. Udviklerne forventer, at Go 1.26 vil kr\u00e6ve punktudgivelsen Go 1.24 eller nyere.<\/p>\n<p><\/noindex> <\/p>\n<h2>Standardbibliotek<\/h2>\n<h3>Begr\u00e6nset adgang til filsystemet i en mappe<\/h3>\n<p> <noindex><\/p>\n<p>Ny type <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> giver mulighed for at udf\u00f8re filsystemoperationer inden for en bestemt mappe.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#OpenRoot\">os.OpenRoot<\/a> \u00e5bner mappen og returnerer <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a>. Metoderne p\u00e5 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root\">os.Root<\/a> opererer i denne mappe og tillader ikke stier at referere til placeringer uden for mappen, inklusive dem, der f\u00f8lger med symbolske links ud af mappen. Metoderne p\u00e5 os.Root afspejler de fleste filsystemoperationer tilg\u00e6ngelige i os-pakken, herunder for eksempel <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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os#Root.Stat\">os.Root.Stat<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Ny benchmark-funktion<\/h3>\n<p> <noindex><\/p>\n<p>Benchmarking kan nu bruge en hurtigere og mindre fejlene metode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Loop\">testing.B.Loop<\/a> til iteration af benchmarks s\u00e5som for b.Loop() { \u2026 } i stedet for typiske loopstrukturer med b.N s\u00e5som for range b.N. Dette giver to betydelige fordele:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Benchmark-funktionen udf\u00f8res pr\u00e6cist \u00e9n gang for hver -count, s\u00e5ledes at dyre installations- og oprydningstrin kun udf\u00f8res \u00e9n gang.<\/li>\n<li>Funktionsparametre og resultater forbliver i live, hvilket forhindrer kompileringsoptimering af l\u00f8kkens krop.<\/li>\n<\/ul>\n<h3>Forbedrede finalizers<\/h3>\n<p> <noindex><\/p>\n<p>Ny funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#AddCleanup\">runtime.AddCleanup<\/a> er en afslutningsmekanisme, der er mere fleksibel, mere effektiv og mindre fejlbeh\u00e6ftet end <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#SetFinalizer\">runtime.SetFinalizer<\/a>. AddCleanup vedh\u00e6fter en opryddelsesfunktion til objektet, som vil blive udf\u00f8rt, s\u00e5 snart objektet ikke l\u00e6ngere er tilg\u00e6ngeligt. Men i mods\u00e6tning til SetFinalizer kan flere oprydninger vedh\u00e6ftes \u00e9t objekt, oprydninger kan vedh\u00e6ftes interne pegere, oprydninger for\u00e5rsager normalt ikke hukommelsesl\u00e6kager, n\u00e5r objekterne danner en cyklus, og oprydninger forsinker ikke frigivelsen af det objekt eller de objekter, som det peger p\u00e5. Ny kode b\u00f8r foretr\u00e6kke AddCleanup frem for SetFinalizer.<\/p>\n<p><\/noindex> <\/p>\n<h3>Ny weak-pakke<\/h3>\n<p> <noindex><\/p>\n<p>Den nye pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/weak\/\">weak<\/a> giver svage peger.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Svage peger er et lavniveau primitiv, der tilbydes til at skabe strukturer, der effektivt udnytter hukommelse, s\u00e5som svage ordlister til at kortl\u00e6gge v\u00e6rdier, kanoniseringsordlister til alt, der ikke d\u00e6kkes af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/unique\/\">unique<\/a>, og forskellige typer cache. For at underst\u00f8tte disse brugsscenarier tilbyder denne version ogs\u00e5 <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime\/#AddCleanup\">runtime.AddCleanup<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/maphash\/#Comparable\">maphash.Comparable<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Den nye pakke crypto\/mlkem<\/h3>\n<p> <noindex><\/p>\n<p>Den nye pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/mlkem\/\">crypto\/mlkem<\/a> implementerer ML-KEM-768 og ML-KEM-1024.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>ML-KEM er en post-kvantum n\u00f8gleudvekslingsmekanisme, tidligere kendt som Kyber og specificeret i <a rel=\"nofollow\" href=\"https:\/\/doi.org\/10.6028\/NIST.FIPS.203\">FIPS 203<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h3>Nye pakker crypto\/hkdf, crypto\/pbkdf2 og crypto\/sha3<\/h3>\n<p> <noindex><\/p>\n<p>Den nye pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/hkdf\/\">crypto\/hkdf<\/a> implementerer en HMAC-baseret n\u00f8gleudvinding funktion \u201cExtract-and-Expand\u201d HKDF, som defineret i <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5869.html\">RFC 5869<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Den nye pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/pbkdf2\/\">crypto\/pbkdf2<\/a> implementerer en password-baseret n\u00f8gleudvinding funktion PBKDF2, som defineret i <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8018.html\">RFC 8018<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Den nye pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha3\/\">crypto\/sha3<\/a> implementerer hash-funktionen SHA-3 og SHAKE samt cSHAKE funktioner for udvidelig udgang, som defineret i <a rel=\"nofollow\" href=\"http:\/\/doi.org\/10.6028\/NIST.FIPS.202\">FIPS 202<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Alle tre pakker er baseret p\u00e5 eksisterende pakker fra golang.org\/x\/crypto\/\u2026.<\/p>\n<h3>FIPS 140-3 compliance<\/h3>\n<p> <noindex><\/p>\n<p>Denne version inkluderer <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/security\/fips140\">et nyt s\u00e6t mekanismer til at sikre FIPS 140-3 compliance<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<p>Go's kryptografiske modul er et s\u00e6t interne pakker fra standardbiblioteket, der transparent bruges til at implementere godkendte FIPS 140-3 algoritmer. Applikationer kr\u00e6ver ikke \u00e6ndringer for at anvende Go's kryptografiske modul til godkendte algoritmer.<\/p>\n<p> <noindex><\/p>\n<p>Den nye milj\u00f8variabel GOFIPS140 kan bruges til at v\u00e6lge den version af Go's kryptografiske modul, der skal bruges i bygningen. Den nye <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">indstilling GODEBUG<\/a> fips140 kan bruges til at aktivere FIPS 140-3 mode under k\u00f8rsel.<\/p>\n<p><\/noindex> <\/p>\n<p>Go 1.24 inkluderer Go's kryptografiske modul version v1.0.0, som i \u00f8jeblikket testes med en akkrediteret CMVP-laboratorium.<\/p>\n<h3>Den nye eksperimentelle pakke testing\/synctest<\/h3>\n<p> <noindex><\/p>\n<p>Den nye eksperimentelle pakke <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/\">testing\/synctest<\/a> giver support til test af concurrent kode.<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest\/#Run\">synctest.Run<\/a> starter en gruppe gorutiner i en isoleret \u201cbubble\u201d. I boblen fungerer pakke-funktionerne <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time\">time<\/a> p\u00e5 falske ur.<\/li>\n<li>Functions <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing\/synctest#Wait\">synctest.Wait<\/a> venter p\u00e5, at alle gorutiner er blokeret i den nuv\u00e6rende boble.<\/li>\n<\/ul>\n<p>Detaljer kan findes i pakkens dokumentation.<\/p>\n<p> <noindex><\/p>\n<p>Pakken synctest er eksperimentel og skal aktiveres ved at s\u00e6tte GOEXPERIMENT=synctest. API'en i pakken kan \u00e6ndre sig i fremtidige versioner. Du <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67434\">#67434<\/a> kan finde flere detaljer og give feedback.<\/p>\n<p><\/noindex> <\/p>\n<h3>Mindre \u00e6ndringer i biblioteket<\/h3>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/archive\/\">archive<\/a><\/h4>\n<p>Implementeringerne (*Writer.AddFS) i archive\/zip og archive\/tar skriver nu headeren for en tom mappe.<\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\/\">bytes<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Pakken <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes\">bytes<\/a> tilf\u00f8jer flere funktioner, der arbejder med iteratorer:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#Lines\">Lines<\/a> returnerer en iterator over linjer adskilt af nye linjer i et byte slice.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitSeq\">SplitSeq<\/a> returnerer en iterator over alle delsekvenser af byte-slices, opdelt med en separator.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#SplitAfterSeq\">SplitAfterSeq<\/a> returnerer en iterator over delsekvenser af byte-slices, opdelt efter hver forekomst af separatoren.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/bytes#FieldsSeq\">FieldsSeq<\/a> returnerer en iterator over delsekvenser af byte-slices omkring sekvenser af mellemrum, som defineret. <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> returnerer en iterator over delsekvenser af byte-slices omkring sekvenser af unicode-kodepunkter, der opfylder et pr\u00e6g.<\/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>V\u00e6rdien, der returneres <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes#NewCipher\">NewChipher<\/a> implementerer ikke l\u00e6ngere metoderne NewCTR, NewGCM, NewCBCEncrypter og NewCBCDecrypter. Disse metoder var u-dokumenterede og var ikke tilg\u00e6ngelige p\u00e5 alle arkitekturer. Nu er v\u00e6rdien <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Block\">Block<\/a> skal overf\u00f8res direkte til de relevante funktioner <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher\/\">crypto\/cipher<\/a>. P\u00e5 nuv\u00e6rende tidspunkt kontrollerer crypto\/cipher stadig disse metoder p\u00e5 Block-v\u00e6rdier, selvom de ikke l\u00e6ngere underst\u00f8ttes af standardbiblioteket.<\/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>Ny funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewGCMWithRandomNonce\">NewGCMWithRandomNonce<\/a> returnerer <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a>, som implementerer AES-GCM, genererer et tilf\u00e6ldigt engangsnummer under Seal og tilf\u00f8jer det til begyndelsen af den krypterede tekst.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Implementering <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a>, der returneres <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> ved brug sammen med <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/aes\/\">crypto\/aes<\/a> er nu flere gange hurtigere p\u00e5 amd64 og 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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCFBDecrypter\">NewCFBDecrypter<\/a> er nu erkl\u00e6ret for\u00e6ldet. OFB- og CFB-tilstande er ikke autentificerede, hvilket generelt giver aktive angreb mulighed for at manipulere og genskabe klartekst. Applikationer anbefales at bruge <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#AEAD\">AEAD<\/a> i stedet. Hvis en ikke-autentificeret tilstand <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#Stream\">Stream<\/a> er n\u00f8dvendig, kan <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/cipher#NewCTR\">NewCTR<\/a> bruges i stedet.<\/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> genererer nu en deterministisk signatur i overensstemmelse med <a rel=\"nofollow\" href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6979.html\">RFC 6979<\/a>, hvis tilf\u00e6ldighedskilden er 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>V\u00e6rdien, der returneres <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/md5#New\">md5.New<\/a>, implementerer nu ogs\u00e5 interfacet <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\">L\u00e6s<\/a> garanterer nu frav\u00e6r af fejl. Hvis Read st\u00f8der p\u00e5 en fejl under l\u00e6sning <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Reader\">Reader<\/a>, afslutter programmet katastrofalt. Bem\u00e6rk, at standard Reader er dokumenteret til altid at arbejde korrekt, s\u00e5 denne \u00e6ndring b\u00f8r kun p\u00e5virke de programmer, der overskriver Reader-variablen. Den eneste undtagelse er Linux-kerneller f\u00f8r version 3.17, hvor standard Reader stadig \u00e5bner \/dev\/urandom og kan fejle.<\/p>\n<p><\/noindex> <\/p>\n<p>P\u00e5 Linux 6.11 og senere bruger Reader nu systemopkaldet getrandom via vDSO. Dette er flere gange hurtigere, normalt ved sm\u00e5 l\u00e6sninger.<\/p>\n<p>P\u00e5 OpenBSD bruger Reader nu arc4random_buf(3).<\/p>\n<p> <noindex><\/p>\n<p>Ny funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rand#Text\">Text<\/a> kan nu generere kryptografisk sikre tilf\u00e6ldige tekststrenge.<\/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> returnerer nu en fejl, hvis der anmodes om en n\u00f8gle med en l\u00e6ngde p\u00e5 mindre end 1024 bit. Alle metoder Sign, Verify, Encrypt og Decrypt returnerer nu en fejl, hvis de bruges med en n\u00f8gle, der er mindre end 1024 bit. S\u00e5danne n\u00f8gler er usikre og b\u00f8r ikke anvendes. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillinger<\/a> rsa1024min=0 genopretter den gamle adf\u00e6rd, men Go-udviklere anbefaler kun at g\u00f8re dette, n\u00e5r det er n\u00f8dvendigt, og kun til testform\u00e5l, for eksempel ved at tilf\u00f8je linjen \/\/go:debug rsa1024min=0 i testfilen. Ny <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#example-GenerateKey-TestKey\">eksempel<\/a> GenerateKey giver en nemt anvendelig standard 2024-bit testn\u00f8gle.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Det er nu sikkert og mere effektivt at kalde <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precompute\">PrivateKey.Precompute<\/a> op til <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Validate\">PrivateKey.Validate<\/a>. Precompute er nu hurtigere i n\u00e6rv\u00e6relse af delvist udfyldte <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrecomputedValues\">PrecomputedValues<\/a>, for eksempel ved at udtr\u00e6kke n\u00f8glen fra JSON.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Pakke afviser nu flere forkerte n\u00f8gler, selv n\u00e5r Validate ikke kaldes, og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> kan nu returnere nye fejl for brudte tilf\u00e6ldige kilder. Felterne <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Primes\">Primes<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey.Precomputed\">Precomputed<\/a> struct seccomp_data <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#PrivateKey\">PrivateKey<\/a> bruges og valideres nu, selv n\u00e5r nogle v\u00e6rdier mangler. Der er ogs\u00e5 foretaget \u00e6ndringer i crypto\/x509 vedr\u00f8rende fortolkning og udtr\u00e6kning af RSA-n\u00f8gler, beskrevet nedenfor.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#SignPKCS1v15\">SignPKCS1v15<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#VerifyPKCS1v15\">VerifyPKCS1v15<\/a> underst\u00f8tter nu SHA-512\/224, SHA-512\/256 og SHA-3.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/rsa#GenerateKey\">GenerateKey<\/a> bruger nu en lidt anden metode til at generere den private eksponent (Carmichael-funktionen i stedet for Eulers funktion). Sj\u00e6ldne anvendelser, der udefra genskaber n\u00f8gler kun fra primtallene, kan skabe forskellige, men kompatible resultater.<\/p>\n<p><\/noindex> <\/p>\n<p>Operationer med offentlige og private n\u00f8gler er nu op til to gange hurtigere p\u00e5 wasm.<\/p>\n<h3>crypto\/sha*<\/h3>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/sha1\/\">crypto\/sha1<\/a>: v\u00e6rdien, der returneres af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha1#New\">sha1.New<\/a> implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>: v\u00e6rdierne, der returneres af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New\">sha256.New<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha256#New224\">sha256.New224<\/a> implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>: v\u00e6rdierne, der returneres af <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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sha512#New512_256\">sha512.New512_256<\/a>, implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>Ny funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#WithDataIndependentTiming\">WithDataIndependentTiming<\/a> giver brugeren mulighed for at udf\u00f8re funktionen med aktiverede pr\u00f8vespecifikke funktioner, som sikrer u\u00e6ndret bestemte instruktioner med hensyn til tid og datav\u00e6rdier. Dette kan bruges til at sikre, at koden, der er designet til at k\u00f8re p\u00e5 konstant tid, ikke er blevet optimeret af processorens funktionsniveau p\u00e5 en m\u00e5de, s\u00e5 den k\u00f8rer i varierende tid. I \u00f8jeblikket bruger WithDataIndependentTiming bit PSTATE.DIT p\u00e5 arm64 og g\u00f8r ingenting p\u00e5 alle andre arkitekturer. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillinger<\/a> dataindependenttiming=1 aktiverer DIT-tilstand for hele Go-programmet.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Output <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/subtle#XORBytes\">XORBytes<\/a> skal enten overlappe helt eller slet ikke med indgangen. Tidligere var adf\u00e6rden udefineret i modsat fald, mens XORBytes nu vil panikere.<\/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>TLS-serveren underst\u00f8tter nu Encrypted Client Hello (ECH). Denne funktion kan aktiveres ved at udfylde feltet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.EncryptedClientHelloKeys\">Config.EncryptedClientHelloKeys<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Den nye post-kvant n\u00f8gleudvekslingsmekanisme <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#X25519MLKEM768\">X25519MLKEM768<\/a> underst\u00f8ttes nu og er aktiveret som standard, n\u00e5r <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> er nil. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillinger<\/a> tlsmlkem=0 returnerer standard.<\/p>\n<p><\/noindex> <\/p>\n<p>Underst\u00f8ttelse af den eksperimentelle n\u00f8gleudveksling X25519Kyber768Draft00 er blevet fjernet.<\/p>\n<p> <noindex><\/p>\n<p>N\u00f8gleudvekslingsr\u00e6kkef\u00f8lgen h\u00e5ndteres nu fuldt ud af pakken crypto\/tls. R\u00e6kkef\u00f8lgen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#Config.CurvePreferences\">Config.CurvePreferences<\/a> bliver nu ignoreret, og indholdet bruges kun til at bestemme, hvilke n\u00f8gleudvekslinger der skal aktiveres, n\u00e5r feltet er udfyldt.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nyt felt <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/tls#ClientHelloInfo.Extensions\">ClientHelloInfo.Extensions<\/a> opregner listen over extensions-IDer modtaget i Client Hello-beskeden. Dette kan v\u00e6re nyttigt til client TLS fingerprinting.<\/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-indstillinger<\/a> x509sha1 er blevet fjernet. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certficicate.Verify<\/a> underst\u00f8tter ikke l\u00e6ngere underskrifter baseret p\u00e5 SHA-1.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OID<\/a> implementerer nu interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Standardfeltet for certifikatpolitikker er blevet \u00e6ndret fra <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.PolicyIdentifiers\">Certificate.PolicyIdentifiers<\/a> og f\u00e5 en fungerende kommando. <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Policies\">Certificate.Policies<\/a>. Ved parsing af certifikater vil begge felter blive udfyldt, men ved oprettelse af certifikatpolitikker vil de blive taget fra feltet Certificate.Policies i stedet for Certificate.PolicyIdentifiers. Denne \u00e6ndring kan blive \u00e6ndret <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">ved indstillingen 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> vil nu generere et serienummer ved hj\u00e6lp af en RFC 5280-kompatibel metode ved at overf\u00f8re skabelon gennem feltet <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.SerialNumber\">Certificate.SerialNumber<\/a> nil, i stedet for at fejle.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#Certificate.Verify\">Certificate.Verify<\/a> underst\u00f8tter nu validering af politikker, som defineret i RFC 5280 og RFC 9618. Det nye felt <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#VerifyOptions.CertificatePolicies\">VerifyOptions.CertificatePolicies<\/a> kan s\u00e6ttes til et acceptabelt s\u00e6t politikker <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#OID\">OIDs<\/a>. Kun kedjer med gyldige politikker returneres fra <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> returnerer nu en fejl i stedet for at udtr\u00e6kke en forkert RSA-n\u00f8gle. (<a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#MarshalPKCS1PrivateKey\">MarshalPKCS1PrivateKey<\/a> returnerer ikke en fejl, og dens adf\u00e6rd med de forkerte n\u00f8gler forbliver udefineret.)<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS1PrivateKey\">ParsePKCS1PrivateKey<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/crypto\/x509#ParsePKCS8PrivateKey\">ParsePKCS8PrivateKey<\/a> bruger nu og validerer de kodede CRT-v\u00e6rdier, s\u00e5 de kan afvise forkerte RSA-n\u00f8gler, der tidligere blev accepteret. Brug af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillinger<\/a> x509rsacrt=0 returnerer til rekalkuleringen af CRT-v\u00e6rdier.<\/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>Pakken <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf\">debug\/elf<\/a> tilf\u00f8jer underst\u00f8ttelse til h\u00e5ndtering af versionsnumre i dynamiske ELF-filer (Executable and Linkable Format). Den nye metode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersions\">File.DynamicVersions<\/a> returnerer en liste over de dynamiske versioner, der er defineret i ELF-filen. Den nye metode <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#File.DynamicVersionNeeds\">File.DynamicVersionNeeds<\/a> returnerer en liste over de dynamiske versioner, der kr\u00e6ves af denne ELF-fil, som er defineret i andre ELF-objekter. Endelig indikerer de nye felter <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.HasVersion<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/debug\/elf#Symbol\">Symbol.VersionIndex<\/a> symbolets version.<\/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>To nye interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">TextAppender<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">BinaryAppender<\/a> er blevet introduceret til at tilf\u00f8je en tekst- eller bin\u00e6r repr\u00e6sentation af objektet til et byte-slice. Disse interfaces giver samme funktionalitet som <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextMarshaler\">TextMarshaler<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryMarshaler\">BinaryMarshaler<\/a>, men i stedet for at allokere et nyt slice hver gang, tilf\u00f8jer de data direkte til det eksisterende slice. Disse interfaces er nu implementeret af standardbibliotekstyper, der allerede implementerer TextMarshaler og\/eller 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>N\u00e5r strukturen genereres, vil feltet med den nye omitzero mulighed i feltets tag blive udeladt, hvis v\u00e6rdien er nul. Hvis feltets type har en metode IsZero() bool, vil den blive brugt til at bestemme, om v\u00e6rdien er nul. Ellers vil v\u00e6rdien v\u00e6re nul, hvis den er <a rel=\"nofollow\" href=\"https:\/\/go.dev\/ref\/spec#The_zero_value\">nul-v\u00e6rdi for sin type<\/a>. Felt-tagget omitzero er renere og mindre fejlbeh\u00e6ftet end omitempty, n\u00e5r intentionen er at udelade nulv\u00e6rdier. I s\u00e6rdeleshed, i mods\u00e6tning til omitempty, udelader omitzero nulv\u00e6rdier, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/time#Time\">time.Time<\/a> som er en almindelig kilde til problemer.<\/p>\n<p><\/noindex> <\/p>\n<p>Hvis b\u00e5de omitempty og omitzero angives, vil feltet blive udeladt, hvis v\u00e6rdien er tom eller nul (eller begge dele sammen).<\/p>\n<p> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding\/json#UnmarshalTypeError.Field\">UnmarshalTypeError.Field<\/a> inkluderer nu indbyggede strukturer til at give mere detaljerede fejlmeddelelser.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/go\/types\/\">go\/types<\/a><\/h4>\n<p>Alle datatyper i go\/types, der afsl\u00f8rer sekvenser af par metoder som Len() int og At(int) T, har nu ogs\u00e5 metoder, der returnerer iteratorer, hvilket g\u00f8r det lettere at skrive kode som denne:<\/p>\n<p> params := fn.Type.(*types.Signature).Params() for i := 0; i &lt; params.Len(); i++ {   use(params.At(i)) }   <\/p>\n<p>Til dette:<\/p>\n<p> for param := range fn.Signature().Params().Variables() {   use(param) }   <noindex><\/p>\n<p>Metoder: <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>: v\u00e6rdien, der returneres af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/adler32#New\">Ny<\/a>, implementerer nu ogs\u00e5 interfacet <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>: v\u00e6rdierne, der returneres af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#New\">Ny<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc32#NewIEEE\">NewIEEE<\/a>, implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>: v\u00e6rdien, der returneres af <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/crc64#New\">Ny<\/a>, implementerer nu ogs\u00e5 interfacet <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>: v\u00e6rdierne, der returneres af <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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/fnv#New128a\">New128a<\/a>, implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>: nye funktioner <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#Comparable\">Comparable<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/hash\/maphash#WriteComparable\">WriteComparable<\/a> kan beregne hash af enhver v\u00e6rdi, der kan sammenlignes. Dette muligg\u00f8r hashing af alt, der kan bruges som en n\u00f8gle i Go-dictionary.<\/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>Ny <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#DiscardHandler\">DiscardHandler<\/a> er en handler, der aldrig er inkluderet og altid kasserer sin output.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#Level\">Niveau<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/log\/slog#LevelVar\">LevelVar<\/a> implementerer nu 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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/big#Rat\">Rat<\/a> implementerer nu 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>: kald til den for\u00e6ldede overordnede funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand#Seed\">Seed<\/a> har ikke l\u00e6ngere nogen effekt. For at genskabe den gamle adf\u00e6rd kan man bruge <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/godebug\">GODEBUG-indstillingen<\/a> randseednop=0. Mere kontekst i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/67273\">s\u00e6tning 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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/math\/rand\/v2#PCG\">PCG<\/a> implementerer nu 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> bruger nu MPTCP som standard p\u00e5 systemer, hvor det underst\u00f8ttes (aktuelt kun Linux).<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net#IP\">IP<\/a> implementerer nu 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>\u00c6ndret begr\u00e6nsning <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> p\u00e5 modtagne informationssvar 1xx som svar p\u00e5 anmodning. Tidligere stoppede dette anmodningen og returnerede en fejl efter modtagelse af mere end 5 svar 1xx. Nu returneres der kun en fejl, hvis den samlede st\u00f8rrelse af alle svar 1xx overstiger konfigurationsindstillingen <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.MaxResponseHeaderBytes\">Transport.MaxResponseHeaderBytes<\/a>.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Derudover, n\u00e5r der er en h\u00e6ndelse til at spore <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http\/httptrace#ClientTrace.Got1xxResponse\">net\/http\/httptrace.ClientTrace.Got1xxResponse<\/a>, er der nu ingen begr\u00e6nsning p\u00e5 det samlede antal svar 1xx. Got1xxResponse-h\u00e6ndelsen kan returnere en fejl for at stoppe anmodningen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport\">Transport<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server\">Server<\/a> har nu et HTTP2-felt, som tillader konfiguration af HTTP\/2-protokolindstillinger.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nye felter <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> giver en enkel m\u00e5de at konfigurere, hvilke HTTP-protokoller serveren eller klienten bruger.<\/p>\n<p><\/noindex> <\/p>\n<p>Server og klient kan konfigureres til at underst\u00f8tte ukrypterede HTTP\/2-forbindelser.<\/p>\n<p> <noindex><\/p>\n<p>N\u00e5r <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Server.Protocols\">Server.Protocols<\/a> indeholder UnencrypterHTTP2, serveren vil acceptere HTTP\/2-forbindelser p\u00e5 ukrypterede porte. Serveren kan acceptere b\u00e5de HTTP\/1 og ukrypteret HTTP\/2 p\u00e5 den samme port.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>N\u00e5r <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/http#Transport.Protocols\">Transport.Protocols<\/a> indeholder UnencryptedHTTP2 og har ikke HTTP1, transporten vil bruge ukrypteret HTTP\/2 for adresser <a rel=\"nofollow\" href=\"http:\/\/.\">http:\/\/.<\/a> Hvis transporten er konfigureret til at bruge b\u00e5de HTTP\/1 og ukrypteret HTTP\/2, vil den benytte HTTP\/1.<\/p>\n<p><\/noindex> <\/p>\n<p>Underst\u00f8ttelsen af ukrypteret HTTP\/2 bruger \"HTTP\/2 med forudg\u00e5ende kendskab\" (RFC 9113, sektion 3.3). Den for\u00e6ldede header \"Upgrade: h2c\" underst\u00f8ttes ikke.<\/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> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/net\/netip#Prefix\">Prefix<\/a> implementerer nu gr\u00e6nseflader <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> og <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> implementerer nu ogs\u00e5 gr\u00e6nsefladen <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>direkte sammens\u00e6tning (Direct Composition), hvilket burde have en positiv indvirkning p\u00e5 ydeevnen. Derudover <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> kan nu anvendes i Windows Nano Server. Implementeringen er opdateret for at undg\u00e5 anvendelse af funktioner fra NetApi32-biblioteket, som ikke findes i Nano Server.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>direkte sammens\u00e6tning (Direct Composition), hvilket burde have en positiv indvirkning p\u00e5 ydeevnen. Derudover <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a>, <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Lookup\">Lookup<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#LookupId\">LookupId<\/a> underst\u00f8tter nu f\u00f8lgende indbyggede brugerkonti:<\/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>direkte sammens\u00e6tning (Direct Composition), hvilket burde have en positiv indvirkning p\u00e5 ydeevnen. Derudover <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> er blevet betydeligt accelereret, n\u00e5r den nuv\u00e6rende bruger er tilsluttet et langsomt dom\u00e6ne, hvilket er en almindelig situation for mange virksomhedsanvendere. Den nye ydeevne for implementeringen er nu i millisekunder, sammenlignet med den tidligere implementering, som kunne tage flere sekunder, endda minutter, for at f\u00e6rdigg\u00f8re.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>direkte sammens\u00e6tning (Direct Composition), hvilket burde have en positiv indvirkning p\u00e5 ydeevnen. Derudover <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/os\/user#Current\">Current<\/a> returnerer nu ejeren af processen, n\u00e5r den nuv\u00e6rende tr\u00e5d udgiver sig for en anden bruger. Tidligere returnerede det en fejl.<\/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> implementerer nu 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\/\">runtime<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Funktion <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/runtime#GOROOT\">GOROOT<\/a> er nu blevet erkl\u00e6ret for\u00e6ldet. I den nye kobling b\u00f8r det foretr\u00e6kkes at bruge systemstien til at bestemme bin\u00e6ren \"go\", og bruge go env GOROOT til at bestemme 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>Pakken <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings\">strings<\/a> tilf\u00f8jer flere funktioner til at arbejde med iterat\u00f8rer:<\/p>\n<p><\/noindex> <\/p>\n<ul>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#Lines\">Lines<\/a> returnerer en iterator for linjer adskilt af nye linjer i en streng.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitSeq\">SplitSeq<\/a> returnerer en iterator for alle substrenge i en streng, adskilt af separatoren.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#SplitAfterSeq\">SplitAfterSeq<\/a> returnerer en iterator for substrenge i strengen, adskilt efter hver forekomst af separatoren.<\/li>\n<li><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/strings#FieldsSeq\">FieldsSeq<\/a> returnerer en iterator for substrenge i strengen omkring sekvenser af hvide tegn, som defineret<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> returnerer en iterator for substrenge i strengen omkring sekvenser af unicode-kodede punkter, der opfylder predikatet.<\/li>\n<\/ul>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync\/\">synk<\/a><\/h4>\n<p> <noindex><\/p>\n<p>Implementering <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/sync#Map\">sync.Map<\/a> er blevet \u00e6ndret til at forbedre ydeevnen, is\u00e6r for \u00e6ndringer i ordb\u00f8ger. For eksempel er der mindre sandsynlighed for konkurrence om \u00e6ndringer af ikke-overlappende m\u00e6ngder i store ordb\u00f8ger, og det kr\u00e6ver ikke l\u00e6ngere tid til opbygning for at n\u00e5 en lav konkurrencebelastning i ordbogen.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Hvis du m\u00f8der problemer, skal du indstille GOEXPERIMENT=nosynchashtriemap under kompileringen for at vende tilbage til den gamle implementering, og venligst <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/new\">udfyld problemmeldingsformularen<\/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>Nye metoder <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Context\">T.Context<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Context\">B.Context<\/a> returnerer konteksten, som annulleres efter testen er afsluttet og f\u00f8r oprydningsfunktionerne udf\u00f8res.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Nye metoder <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#T.Chdir\">T.Chdir<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/testing#B.Chdir\">B.Chdir<\/a> kan bruges til at \u00e6ndre arbejdsbiblioteket i test- eller benchmarkperioden.<\/p>\n<p><\/noindex> <\/p>\n<h4><a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/text\/template\/\">text\/template<\/a><\/h4>\n<p>Skabeloner underst\u00f8tter nu range-over-func og 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\">Tid<\/a> implementerer nu interfaces <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#BinaryAppender\">encoding.BinaryAppender<\/a> og <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/encoding#TextAppender\">encoding.TextAppender<\/a>.<\/p>\n<p><\/noindex> <\/p>\n<h2>Porter<\/h2>\n<h3>Linux<\/h3>\n<p> <noindex><\/p>\n<p>Hvordan det var <a rel=\"nofollow\" href=\"https:\/\/go.dev\/doc\/go1.23#linux\">tilkendegivet<\/a> i udgivelsesnoterne til Go 1.23, Go 1.24 kr\u00e6ver Linux-kernen version 3.2 eller senere.<\/p>\n<p><\/noindex> <\/p>\n<h3>Darwin<\/h3>\n<p>Go 1.24 er den sidste version, der vil fungere p\u00e5 macOS 11 Big Sur. Go 1.25 vil kr\u00e6ve macOS 12 Monterey eller senere.<\/p>\n<h3>WebAssembly<\/h3>\n<p>Kompilerdirektivet go:wasmexport er tilf\u00f8jet til Go-programmer for at eksportere funktioner til WebAssembly v\u00e6rten.<\/p>\n<p> <noindex><\/p>\n<p>I WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm) underst\u00f8tter Go 1.24 kompilering af Go-programmer som <a rel=\"nofollow\" href=\"https:\/\/github.com\/WebAssembly\/WASI\/blob\/63a46f61052a21bfab75a76558485cf097c0dbba\/legacy\/application-abi.md#current-unstable-abi\">reactor\/library<\/a> ved at angive byggemodusflagget -buildmode=c-shared.<\/p>\n<p><\/noindex> <noindex><\/p>\n<p>Flere typer er nu tilladt som argument- eller resultat_type for funktioner go:wasmimport. Is\u00e6r er bool, string, uintptr og pointere til bestemte typer tilladt (detaljer kan ses i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/pkg\/cmd\/compile#hdr-WebAssembly_Directives\">dokumentationen<\/a>), sammen med 32-bit og 64-bit heltalstyper og flydende tal, samt unsafe.Pointer, som allerede er tilladt. Disse typer er ogs\u00e5 tilladt som argument- eller resultat_type for funktioner go:wasmexport.<\/p>\n<p><\/noindex> <\/p>\n<p>Supportfiler til WebAssembly er blevet flyttet til lib\/wasm fra misc\/wasm.<\/p>\n<p>Den oprindelige hukommelsesst\u00f8rrelse er blevet reduceret betydeligt, is\u00e6r for sm\u00e5 WebAssembly-applikationer.<\/p>\n<h3>Windows<\/h3>\n<p> <noindex><\/p>\n<p>32-bit Windows\/ARM-porten (GOOS=windows GOARCH=arm) er blevet markeret som defekt. Detaljer i <a rel=\"nofollow\" href=\"https:\/\/go.dev\/issue\/70705\">#70705<\/a><\/p>\n<p><\/noindex><\/p>\n<p>Kilde: <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.3 - 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\/da\/blog\/news\/go-1-24\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\/da\/blog\/news\/go-1-24","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/121950","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=121950"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/121950\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/121951"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=121950"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=121950"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=121950"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}