Isang bagong release ng Go language, bersyon 1.24, ay darating pagkalipas ng anim na buwan Pumunta 1.23. Karamihan sa mga pagbabago ay nasa pagpapatupad ng toolchain, runtime at mga library. Gaya ng nakasanayan, nagbibigay ang release pangako ng pagkakatugma Go 1. Inaasahan ng mga taga-disenyo ng wika na halos lahat ng mga programa ng Go ay magpapatuloy na mag-compile at tatakbo tulad ng dati.
Mga pagbabago sa wika
Ang Go 1.24 ngayon ay ganap na sumusuporta mga generic na uri ng alias: ang isang uri ng alias ay maaaring ma-parameter bilang isang ipinahayag na uri. Mga detalye sa mga pagtutukoy ng wika. Sa ngayon, maaaring hindi paganahin ang tampok na ito sa pamamagitan ng pagtatakda ng GOEXPERIMENT=noaliastypeparams; Gayunpaman, ang opsyon na aliastypeparams ay aalisin sa Go 1.25.
Tools
Go command
Maaari na ngayong subaybayan ng mga module ng Go ang mga executable na dependency gamit ang tool directive sa go.mod. Inaalis nito ang pangangailangan para sa nakaraang workaround ng pagdaragdag ng mga tool bilang mga walang laman na pag-import sa isang file na karaniwang tinatawag na "tools.go". Ang command na go tool ay maaari na ngayong magpatakbo ng mga tool na ito bilang karagdagan sa mga tool na kasama ng Go. Higit pang impormasyon ay matatagpuan sa dokumentasyon.
Ang bagong -tool na watawat para sa go get ay nagiging sanhi ng pagdaragdag ng mga direktiba ng tool sa kasalukuyang module para sa mga tinukoy na pakete bilang karagdagan sa pagdaragdag ng nangangailangan ng mga direktiba.
Bago tool na meta-pattern ay tumutukoy sa lahat ng mga kasangkapan sa kasalukuyang module. Magagamit ito para i-update ang lahat sa pamamagitan ng go get tool, o para i-install ang mga ito sa iyong direktoryo ng GOBIN sa pamamagitan ng go install tool.
Ang mga executable na ginawa sa pamamagitan ng go run at ang bagong go tool na gawi ay naka-cache na ngayon sa Go build cache. Ginagawa nitong posible ang paulit-ulit na paglulunsad dahil sa tumaas na cache. #69290.
Ang mga command na go build at go install ay tinatanggap na ngayon ang -json flag, na nag-uulat ng build output at mga error bilang structured JSON output sa karaniwang output. Ang mga detalye ng format ay makikita sa go help buildjson.
Higit pa rito, iniuulat na ngayon ng go test -json ang output at bumuo ng mga error sa JSON, na hinaluan ng resulta ng pagsubok na JSON. Maaari silang makilala sa pamamagitan ng mga bagong uri ng Aksyon, ngunit kung magdulot sila ng mga problema sa sistema ng pagsasama ng pagsubok, maaari kang bumalik sa output ng teksto ng build sa pamamagitan ng Pag-setup ng GODEBUG gotestjsonbuildtext=1.
Ang bagong GOAUTH environment variable ay nagbibigay ng isang flexible na paraan para pahintulutan ang pribadong pag-pull ng module. Maaari mong makita ang mga detalye sa go help goauth.
Naka-install na ngayon ang go build command bersyon ng pangunahing modyul sa pinagsama-samang binary, batay sa isang tag at/o isang version control commit. Ang +dirty suffix ay idadagdag kung may mga hindi nakatalagang pagbabago. Ang -buildvcs=false flag ay maaaring gamitin upang alisin ang impormasyon ng kontrol ng bersyon mula sa binary.
Bago Pag-setup ng GODEBUG toolchaintrace=1 maaari na ngayong gamitin upang subaybayan ang proseso ng pagpili ng toolchain sa go command.
Cgo
Sinusuportahan ng Cgo ang mga bagong anotasyon para sa mga function ng C upang mapabuti ang pagganap ng runtime. #cgo noescape cFunctionName ay nagsasabi sa compiler na ang memorya na ipinasa sa C function na cFunctionName ay hindi nakatakas. #cgo nocallback cFunctionName ay nagsasabi sa compiler na ang C function na cFunctionName ay hindi tumatawag ng anumang Go function. Higit pang impormasyon ay matatagpuan sa dokumentasyon ng cgo.
Kasalukuyang tumatanggi ang Cgo na mag-compile ng mga tawag sa isang function na C na mayroong maraming hindi tugmang deklarasyon. Halimbawa, kung idineklara ang f bilang parehong void f(int) at void f(double), mag-uulat ang cgo ng error sa halip na posibleng bumuo ng invalid na pagkakasunod-sunod ng pagtawag f(0). Bago sa release na ito ay pinahusay na pagtuklas ng kundisyon ng error na ito kapag lumalabas ang mga hindi tugmang deklarasyon sa iba't ibang file. #67699.
Objdump
Sinusuportahan na ngayon ng objdump tool ang disassembly sa 64-bit na LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64), at S390X (GOARCH=s390x).
Gamutin ang hayop
Ang bagong test analyzer ay nag-uulat ng mga karaniwang error sa test, fuzzer, benchmark, at mga halimbawang deklarasyon sa mga test suite, gaya ng mga pangalang hindi wasto, mga di-wastong pirma, o mga halimbawang nagdodokumento ng mga hindi umiiral na identifier. Ang ilan sa mga error na ito ay maaaring maging sanhi ng pagkabigo sa mga pagsubok.
Ang kasalukuyang printf parser ay nag-uulat na ngayon ng mga diagnostic para sa mga tawag sa form na fmt.Printf(s), kung saan ang s ay isang non-constant na format na string na walang ibang mga argumento. Ang ganitong mga tawag ay halos palaging isang error, dahil ang halaga ng s ay maaaring maglaman ng % character; gamitin ang fmt.Print sa halip. 60529. Ang pagsusuring ito ay may posibilidad na maghanap ng mga bagay sa umiiral nang code, at samakatuwid ay inilalapat lamang kapag ang bersyon ng wika (tulad ng tinukoy ng go directive ng go.mod file o ang `//go:build` na mga komento) ay hindi bababa sa Go 1.24, upang maiwasang magdulot ng mahabang integration break kapag nag-a-upgrade sa Go 1.24 toolchain.
Ang kasalukuyang buildtag analyzer ay nag-uulat na ngayon ng mga diagnostic kapag may maling buildtag limitasyon sa pagbuo ng mas lumang bersyon Pumunta sa //go:build na direktiba. Halimbawa, //go:build go1.23.1 ay tumutukoy sa isang paglabas ng punto; sa halip gamitin ang //go:build go1.23. #64127.
Ang kasalukuyang copylock analyzer ay nag-uulat na ngayon ng diagnostic kapag ang isang variable ay idineklara sa isang triple "for" loop, gaya ng for i := iter(); tapos na(i); i = next(i) { β¦ }, naglalaman ng sync.Locker, gaya ng sync.Mutex. Pumunta 1.22 binago ang pag-uugali ng naturang mga loop upang lumikha ng isang bagong variable para sa bawat pag-ulit, pagkopya ng mga halaga mula sa nakaraang pag-ulit; Ang pagkopya na ito ay hindi ligtas para sa mga kandado. #66387.
GOCACHEPROG
Ang internal na cmd/go binary at test caching na mekanismo ay maaari na ngayong ipatupad ng mga child process na nagpapatupad ng JSON protocol sa pagitan ng cmd/go tool at ng child process na pinangalanan ng GOCACHEPROG environment variable. Dati ito ay para sa GOEXPERIMENT. Ang mga detalye ng protocol ay makikita sa dokumentasyon.
Oras ng pagkumpleto
Binawasan ng ilang pagpapahusay sa performance ng runtime ang overhead ng CPU ng 2-3% sa average sa isang hanay ng mga kinatawanng benchmark. Maaaring mag-iba ang mga resulta depende sa aplikasyon. Kasama sa mga pagpapahusay na ito ang isang bagong built-in na pagpapatupad ng mapa batay sa Swedish Tables, mas mahusay na paglalaan ng maliit na memorya ng bagay, at isang bagong panloob na pagpapatupad ng runtime ng mutex.
Ang bagong built-in na pagpapatupad ng mapa at ang bagong internal runtime mutex ay maaaring i-disable sa pamamagitan ng pagtatakda ng GOEXPERIMENT=noswissmap at GOEXPERIMENT=nospinbitmutex sa oras ng build, ayon sa pagkakabanggit.
Compiler
Ipinagbabawal na ng compiler ang pagtukoy ng mga bagong pamamaraan na may mga uri ng receiver na nabuo ng cgo, ngunit posible na lutasin ang paghihigpit na ito sa pamamagitan ng isang uri ng alias. Ang Go 1.24 ngayon ay palaging nag-uulat ng isang error kung ang receiver ay nagsasaad ng cgo-generated na uri, direkta man o hindi direkta (sa pamamagitan ng isang uri ng alias).
Linker
Bumubuo na ngayon ang linker ng GNU build identifier (ELF entry NT_GNU_BUILD_ID) sa mga ELF platform at UUID (Mach-O load command LC_UUID) sa macOS bilang default. Ang build ID o UUID ay nagmula sa Go build ID. Maaari itong i-off gamit ang -B none linker flag, o i-override gamit ang -B 0xNNNN linker flag na may value na hexadecimal na tinukoy ng user.
Promosyon
Gaya ng nakasaad sa Pumunta sa 1.22 na mga tala sa paglabas, Ang Go 1.24 ay nangangailangan na ngayon ng Go 1.22.6 o mas bago upang mai-install. Inaasahan ng mga developer na ang Go 1.26 ay mangangailangan ng isang point release ng Go 1.24 o mas bago upang mailunsad.
Karaniwang Aklatan
Access sa file system na pinaghihigpitan ng direktoryo
Bagong uri os.root Nagbibigay ng kakayahang magsagawa ng mga pagpapatakbo ng file system sa loob ng isang partikular na direktoryo.
Tungkulin os.OpenRoot bubuksan ang direktoryo at ibabalik os.root. Mga pamamaraan sa os.root gumana sa direktoryo na iyon at hindi pinapayagan ang mga path na sumangguni sa mga lokasyon sa labas ng direktoryo, kabilang ang mga sumusunod sa mga simbolikong link sa labas ng direktoryo. Ang mga pamamaraan sa os.Root ay sumasalamin sa karamihan ng mga pagpapatakbo ng filesystem na available sa os package, kabilang ang, halimbawa, os.Root.Buksan, os.Root.Create, os.Root.Mkdir ΠΈ os.Root.Stat.
Bagong benchmark na tampok
Ang mga benchmark ay maaari na ngayong gumamit ng isang mas mabilis, hindi gaanong error-prone na paraan pagsubok.B.Loop upang umulit sa isang benchmark tulad ng para sa b.Loop() { β¦ } sa halip na ang mga tipikal na istruktura ng loop na kinasasangkutan ng bN tulad ng para sa range bN Nag-aalok ito ng dalawang makabuluhang pakinabang:
- Ang benchmark na function ay eksaktong isang beses sa bawat bilang, kaya ang mamahaling mga hakbang sa pag-setup at paglilinis ay isasagawa lamang nang isang beses.
- Ang mga parameter ng function call at mga resulta ay live na, na pumipigil sa compiler mula sa ganap na pag-optimize ng loop body.
Pinahusay na mga finalizer
Bagong feature runtime.AddCleanup ay isang mekanismo ng pagkumpleto na mas nababaluktot, mas mahusay, at mas madaling magkamali kaysa sa runtime.SetFinalizer. Ang AddCleanup ay nag-attach ng function ng paglilinis sa isang bagay na tatakbo sa sandaling maging hindi available ang bagay. Gayunpaman, hindi tulad ng SetFinalizer, ang maraming paglilinis ay maaaring ilakip sa isang bagay, ang mga paglilinis ay maaaring ilakip sa mga panloob na pointer, ang mga paglilinis ay hindi karaniwang nagdudulot ng mga tagas kapag ang mga bagay ay bumubuo ng isang cycle, at ang mga paglilinis ay hindi nakakaantala sa deallocation ng bagay o mga bagay na itinuturo nito. Mas gusto ng bagong code ang AddCleanup kaysa SetFinalizer.
Bagong mahinang pakete
Bagong pakete mahina nagbibigay ng mga mahihinang payo.
Ang mga mahinang pointer ay isang mababang antas na primitive na ibinigay para sa paglikha ng mga istrukturang mahusay sa memorya tulad ng mga mahihinang diksyunaryo para sa mga halaga ng pagmamapa, mga diksyunaryo ng canonicalization para sa anumang hindi saklaw ng isang package. kakaiba, at iba't ibang uri ng mga cache. Upang suportahan ang mga kaso ng paggamit na ito, nagbibigay din ang release na ito runtime.AddCleanup ΠΈ maphash.Mahahambing.
Bagong crypto/mlkem package
Bagong pakete crypto/mlkem nagpapatupad ng ML-KEM-768 at ML-KEM-1024.
Ang ML-KEM ay isang post-quantum key exchange mechanism, na dating kilala bilang Kyber at tinukoy sa Coup 203.
Mga bagong package crypto/hkdf, crypto/pbkdf2 at crypto/sha3
Bagong pakete crypto/hkdf nagpapatupad ng HMAC-based na "Extract-and-Expand" key derivation function na HKDF gaya ng tinukoy sa RFC 5869.
Bagong pakete crypto/pbkdf2 nagpapatupad ng password-based key derivation function na PBKDF2 gaya ng tinukoy sa RFC 8018.
Bagong pakete crypto/sha3 ipinapatupad ang SHA-3 hash function at ang SHAKE at cSHAKE extensible output function gaya ng tinukoy sa Coup 202.
Ang lahat ng tatlong pakete ay nakabatay sa umiiral na golang.org/x/crypto/β¦ na mga pakete.
FIPS 140-3 Pagsunod
Kasama sa release na ito isang bagong hanay ng mga mekanismo upang matiyak ang pagsunod sa FIPS 140-3.
Ang Go crypto module ay isang hanay ng mga panloob na karaniwang pakete ng library na malinaw na ginagamit upang ipatupad ang mga algorithm na inaprubahan ng FIPS 140-3. Ang mga application ay hindi nangangailangan ng mga pagbabago upang magamit ang Go crypto module para sa mga naaprubahang algorithm.
Maaaring gamitin ang bagong environment variable na GOFIPS140 para piliin ang bersyon ng Go crypto module na gagamitin sa isang build. Bago Pag-setup ng GODEBUG Maaaring gamitin ang fips140 upang paganahin ang FIPS 140-3 mode sa runtime.
Kasama sa Go 1.24 ang Go crypto module v1.0.0, na kasalukuyang sinusuri sa isang lab na kinikilala ng CMVP.
Bagong experimental package testing/synctest
Bagong pang-eksperimentong pakete pagsubok/synctest Nagbibigay ng suporta para sa pagsubok ng kasabay na code.
- Tungkulin synctest.run nagpapatakbo ng isang grupo ng mga goroutine sa isang nakahiwalay na "bubble". Sa bubble ng function ng package oras gumana sa mga maling orasan.
- Pag-andar synctest.maghintay maghintay hanggang ma-block ang lahat ng goroutine sa kasalukuyang bubble.
Ang mga detalye ay matatagpuan sa dokumentasyon ng package.
Ang synctest package ay eksperimental at dapat na paganahin sa pamamagitan ng pagtatakda ng GOEXPERIMENT=synctest. Maaaring magbago ang package API sa mga susunod na release. SA #67434 Makakakita ka ng higit pang mga detalye at makakapagbigay ng feedback.
Maliit na pagbabago sa library
archive
Ang (*Writer.AddFS) na mga pagpapatupad sa archive/zip at archive/tar ay isinusulat na ngayon ang header ng direktoryo para sa isang walang laman na direktoryo.
bytes
Package bytes nagdaragdag ng ilang mga function na gumagana sa mga iterator:
- Linya Nagbabalik ng iterator sa mga string na pinaghihiwalay ng bagong linya sa isang byte slice.
- SplitSeq nagbabalik ng iterator sa lahat ng subslices ng isang byte slice na pinaghihiwalay ng isang separator.
- SplitAfterSeq nagbabalik ng iterator sa mga subslice ng isang byte na slice, na hinati pagkatapos ng bawat paglitaw ng separator.
- FieldsSeq nagbabalik ng isang iterator sa mga subslice ng isang byte na slice sa paligid ng mga pagkakasunud-sunod ng mga space character, gaya ng tinukoy unicode.IsSpace
- FieldsFuncSeq nagbabalik ng isang iterator sa mga subslice ng isang byte na slice sa paligid ng mga pagkakasunud-sunod ng mga puntos ng Unicode code na nagbibigay-kasiyahan sa isang predicate.
crypto/aes
Ibalik ang halaga BagongChipher hindi na nagpapatupad ng mga pamamaraan ng NewCTR, NewGCM, NewCBCEncrypter, at NewCBCDecrypter. Ang mga pamamaraang ito ay hindi dokumentado at hindi magagamit sa lahat ng mga arkitektura. Ngayon ang kahulugan Harangan ang dapat direktang maipasa sa naaangkop na mga function crypto/cipher. Sa kasalukuyan, sinusuri pa rin ng crypto/cipher ang mga pamamaraang ito sa mga halaga ng Block, kahit na hindi na sinusuportahan ng karaniwang library ang mga ito.
crypto/cipher
Bagong feature NewGCMWithRandomNonce nagbabalik AeAD, na nagpapatupad ng AES-GCM sa pamamagitan ng pagbuo ng random na nonce sa panahon ng Seal at paglalagay nito sa ciphertext.
Pagpapatupad sapa, nagbalik BagongCTR kapag ginamit kasama ng crypto/aes ngayon ng ilang beses na mas mabilis sa amd64 at arm64.
NewOFB, BagongCFBEncrypter ΠΈ BagongCFBDecrypter ay idineklara na ngayong lipas na. Ang mga mode ng OFB at CFB ay hindi napatotohanan, na karaniwang nagpapahintulot sa mga aktibong pag-atake na manipulahin at mabawi ang plaintext. Inirerekomenda na gamitin ang mga application AeAD bilang kapalit. Kung unauthenticated mode sapa kailangan, magagamit BagongCTR bilang kapalit.
crypto/ecdsa
PrivateKey.Sign ngayon ay lumilikha ng isang deterministikong lagda ayon sa RFC 6979, kung ang randomness source ay wala.
crypto/md5
Ibalik ang halaga md5.bago, ngayon ay nagpapatupad din ng interface encoding.binaryappender.
crypto/rand
Tungkulin Basahin ngayon ay ginagarantiyahan na walang mga pagkabigo. Kung nakatagpo ng error ang Read habang nagbabasa mambabasa, permanenteng magwawakas ang programa. Tandaan na ang default na Reader ay nakadokumento upang laging matagumpay na gumana, kaya ang pagbabagong ito ay dapat lamang makaapekto sa mga program na nag-o-override sa variable ng Reader. Ang isang pagbubukod ay ang mga kernel ng Linux bago ang 3.17, kung saan ang default na Reader ay nagbubukas pa rin /dev/urandom at maaaring mabigo.
Sa Linux 6.11 at mas bago, ginagamit na ngayon ng Reader ang getrandom system call sa pamamagitan ng vDSO. Ito ay ilang beses na mas mabilis, kadalasan para sa maliliit na pagbabasa.
Sa OpenBSD Reader ay gumagamit na ngayon ng arc4random_buf(3).
Bagong feature teksto maaari na ngayong bumuo ng cryptographically secure na random text string.
crypto/rsa
GenerateKey ngayon ay nagbabalik ng isang error kung ang isang key na haba na mas mababa sa 1024 bits ay hiniling. Nagbabalik na ngayon ng error ang lahat ng paraan ng Sign, Verify, Encrypt, at Decrypt kung ginamit sa laki ng key na mas mababa sa 1024 bits. Ang mga naturang susi ay hindi ligtas at hindi dapat gamitin. Pagse-set up ng GODEBUG Ibinabalik ng rsa1024min=0 ang lumang gawi, ngunit inirerekomenda ng mga developer ng Go na gawin lamang ito kapag kinakailangan at sa mga pagsubok lamang, halimbawa sa pamamagitan ng pagdaragdag ng linyang //go:debug rsa1024min=0 sa test file. Bago halimbawa Nagbibigay ang GenerateKey ng isang madaling gamitin na karaniwang 2024-bit na test key.
Ngayon ay mas ligtas at mas mahusay na tumawag PrivateKey.Precompute sa PrivateKey.Validate. Ang precompute ay mas mabilis na ngayon sa pagkakaroon ng bahagyang napuno PrecomputedValues, halimbawa kapag nag-extract ng key mula sa JSON.
Tinatanggihan na ngayon ng package ang higit pang mga invalid na key kahit na hindi tinawag ang Validate, at GenerateKey ay maaari na ngayong magbalik ng mga bagong error para sa mga sirang randomness source. Mga patlang Mga Araw ΠΈ Precomputed istruktura PrivateKey ay ginagamit na ngayon at napatunayan kahit na may nawawalang ilang value. Mayroon ding mga pagbabago sa crypto/x509 para sa pag-parse at pag-extract ng mga RSA key, na inilarawan sa ibaba.
SignPKCS1v15 ΠΈ I-verify angPKCS1v15 sinusuportahan na ngayon ang SHA-512/224, SHA-512/256 at SHA-3.
GenerateKey Gumagamit na ngayon ng bahagyang naiibang paraan para makabuo ng pribadong exponent (Carmichael function sa halip na Euler function). Ang mga bihirang application na panlabas na nagre-regenerate ng mga key mula lamang sa mga prime number ay maaaring makagawa ng iba ngunit magkatugma na mga resulta.
Ang mga operasyon sa pampubliko at pribadong mga susi ay hanggang dalawang beses nang mas mabilis sa wasm.
crypto/sha*
- crypto/sha1: ibalik ang halaga sha1.Bago ngayon ay nagpapatupad din ng interface encoding.binaryappender.
- crypto/sha256: ibinalik ang mga halaga sha256.Bago ΠΈ sha256.Bago224 ngayon din ipatupad ang interface encoding.binaryappender.
- crypto/sha512: ibinalik ang mga halaga sha512.Bago, sha512.Bago384, sha512.Bago512_224 ΠΈ sha512.Bago512_256, ngayon din ipatupad ang interface encoding.binaryappender.
crypto/pino
Bagong feature WithDataIndependentTiming nagbibigay-daan sa user na magsagawa ng isang function na may mga feature na partikular sa arkitektura na pinagana na matiyak na ang ilang mga tagubilin ay hindi mababago kaugnay sa oras ng halaga ng data. Magagamit ito upang matiyak na ang code na isinulat upang tumakbo sa pare-parehong oras ay hindi na-optimize ng mga function sa antas ng processor upang ito ay tumakbo sa variable na oras. Kasalukuyang ginagamit ng WithDataIndependentTiming ang PSTATE.DIT bit sa arm64 at walang ginagawa sa lahat ng iba pang arkitektura. Pagse-set up ng GODEBUG pinapagana ng dataindependenttiming=1 ang DIT mode para sa buong Go program.
Pagbubuhos XORBytes dapat ganap na magkakapatong o hindi lahat sa input. Dati ang pag-uugali ay hindi natukoy kung hindi man, samantalang ngayon ang XORBytes ay mag-panic.
crypto/tls
Sinusuportahan na ngayon ng TLS server ang Encrypted Client Hello (ECH). Maaaring paganahin ang tampok na ito sa pamamagitan ng pagpuno sa field. Config.EncryptedClientHelloKeys.
Isang Bagong Post-Quantum Key Exchange Mechanism X25519MLKEM768 ngayon ay sinusuportahan at pinagana bilang default kapag Config.CurvePreferences ay wala. Pagse-set up ng GODEBUG tlsmlkem=0 ay nagbabalik ng default.
Inalis na ang suporta para sa eksperimentong X25519Kyber768Draft00 key exchange.
Ang key exchange order ay ganap na ngayong pinangangasiwaan ng crypto/tls package. Umorder Config.CurvePreferences ay binabalewala na ngayon at ang mga nilalaman ay ginagamit lamang upang matukoy kung aling mga pangunahing palitan ang isasama kapag ang field ay napunan.
Bagong field ClientHelloInfo.Extensions Inililista ang listahan ng mga extension identifier na natanggap sa mensahe ng Client Hello. Maaari itong maging kapaki-pakinabang para sa pag-fingerprint ng mga kliyente ng TLS.
crypto/x509
Pagse-set up ng GODEBUG Ang x509sha1 ay tinanggal. Sertipikasyon.I-verify hindi na sumusuporta sa SHA-1 based signatures.
OID ngayon ay nagpapatupad ng mga interface encoding.binaryappender ΠΈ encoding.TextAppender.
Ang default na field ng patakaran sa certificate ay binago mula sa Certificate.PolicyIdentifiers sa Sertipiko.Mga Patakaran. Kapag nag-parse ng mga certificate, mapo-populate ang parehong field, ngunit kapag gumagawa ng patakaran sa certificate, kukunin ang mga ito mula sa field na Certificate.Policies sa halip na Certificate.PolicyIdentifiers. Maaaring ibalik ang pagbabagong ito. Pag-setup ng GODEBUG x509usepolicies=0.
Lumikha ng Sertipiko bubuo na ngayon ng serial number gamit ang RFC 5280 compliant method kapag nagpapasa ng template field Sertipiko.SerialNumber wala, sa halip na mag-crash.
Sertipiko.I-verify Sinusuportahan na ngayon ang pagpapatunay ng patakaran gaya ng tinukoy sa RFC 5280 at RFC 9618. Bagong field VerifyOptions.CertificatePolicies maaaring itakda sa isang katanggap-tanggap na hanay ng mga patakaran Mga OID. Tanging ang mga chain ng certificate na may wastong mga graph ng patakaran ang ibabalik mula sa Sertipiko.I-verify.
MarshalPKCS8PrivateKey ngayon ay nagbabalik ng error sa halip na kunin ang isang di-wastong RSA key. (MarshalPKCS1PrivateKey ay walang error return at ang pag-uugali nito kapag ibinigay ang mga di-wastong key ay nananatiling hindi natukoy.)
ParsePKCS1PrivateKey ΠΈ ParsePKCS8PrivateKey ngayon ay gumagamit at nagpapatunay ng mga naka-encode na halaga ng CRT, kaya maaaring tanggihan ang mga di-wastong RSA key na dating tinanggap. Paggamit Mga setting ng GODEBUG x509rsacrt=0 ay bumalik sa muling pagkalkula ng mga halaga ng CRT.
debug/elf
Package debug/elf Nagdaragdag ng suporta para sa paghawak ng mga bersyon ng simbolo sa mga dynamic na ELF (Executable at Linkable Format) na mga file. Bagong paraan File.DynamicVersions Nagbabalik ng listahan ng mga dynamic na bersyon na tinukoy sa isang ELF file. Bagong paraan File.DynamicVersionNeeds Nagbabalik ng listahan ng mga dynamic na bersyon na kinakailangan ng ELF file na ito na tinukoy sa iba pang mga ELF object. Sa wakas, mga bagong field Simbolo.HasVersion ΠΈ Simbolo.VersionIndex ipahiwatig ang bersyon ng simbolo.
pag-encode
Dalawang bagong interface TextAppender ΠΈ BinaryAppender ay ipinakilala upang magdagdag ng isang teksto o binary na representasyon ng isang bagay sa isang byte slice. Ang mga interface na ito ay nagbibigay ng parehong functionality bilang TextMarshaler ΠΈ BinaryMarshaler, ngunit sa halip na maglaan ng bagong slice sa bawat oras, direktang nagdaragdag sila ng data sa isang kasalukuyang slice. Ang mga interface na ito ay kasalukuyang ipinapatupad ng mga karaniwang uri ng library na nagpapatupad na ng TextMarshaler at/o BinaryMarshaler.
encoding/json
Kapag nagtatayo, aalisin ang isang structure field na may bagong opsyon na omitzero sa structure field na tag kung zero ang value nito. Kung ang uri ng field ay may IsZero() bool method, gagamitin ito para matukoy kung zero ang value. Kung hindi, ang halaga ay magiging zero kung ito null value para sa uri nito. Ang omitzero field tag ay mas malinis at hindi gaanong madaling kapitan ng error kaysa sa omitempty kapag ang layunin ay alisin ang mga null value. Sa partikular, hindi tulad ng omitempty, ang omitzero ay nag-aalis ng mga zero oras.oras mga halaga, na karaniwang pinagmumulan ng mga problema.
Kung parehong tinukoy ang omitempty at omitzero, aalisin ang field kung walang laman o zero ang value (o pareho).
UnmarshalTypeError.Field Kasama na ngayon ang mga built-in na istruktura upang magbigay ng mas detalyadong mga mensahe ng error.
go/types
Ang lahat ng go/types na istruktura ng data na naglalantad ng mga pagkakasunud-sunod ng mga pares ng pamamaraan, tulad ng Len() int at At(int) T, ay mayroon na ngayong mga pamamaraan na nagbabalik ng mga iterator, na nagpapahintulot sa mas simpleng code na tulad nito:
params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }
Sa isang ito:
para sa param := range fn.Signature().Params().Variables() { use(param) }
Mga pamamaraan: Interface.EmbeddedTypes Interface.ExplicitMethods Interface.Paraan MethodSet.Methods Pinangalanan.Paraan Saklaw.Mga bata Istruktura.Mga Patlang Tuple.Mga Variable TypeList.Types TypeParamList.TypeParams Union.Mga Tuntunin
hash/*
- hash/adler32: ibalik ang halaga bago, ngayon ay nagpapatupad din ng interface encoding.binaryappender
- hash/crc32: ibinalik ang mga halaga bago ΠΈ BagongIEEE, ngayon din ipatupad ang interface encoding.binaryappender
- hash/crc64: ibalik ang halaga bago, ngayon ay nagpapatupad din ng interface encoding.binaryappender
- hash/fnv: ibinalik ang mga halaga New32 Bago32a New64 Bago64a New128 ΠΈ Bago128a, ngayon din ipatupad ang interface encoding.binaryappender
- hash/maphash: mga bagong tampok Maihahambing ΠΈ WriteComparable maaaring kalkulahin ang hash ng anumang halaga na maihahambing. Binibigyang-daan ka nitong i-hash ang anumang maaaring magamit bilang key ng diksyunaryo ng Go.
log/slog
Bago ItaponHandler ay isang handler na hindi kailanman pinagana at palaging itinatapon ang output nito.
Antas ΠΈ LevelVar ngayon ipatupad ang interface encoding.TextAppender.
matematika/*
- matematika/malaki: Karosa, Int ΠΈ Daga ngayon ipatupad ang interface encoding.TextAppender.
- matematika/rand: hindi na ginagamit na mga tawag sa pagpapaandar sa pinakamataas na antas Magbigay ng binhi wala nang epekto. Upang maibalik ang dating gawi, maaari mong gamitin Pag-setup ng GODEBUG randseednop=0. Higit pang konteksto sa alok 67273.
- matematika/rand/v2: ChaCha8 ΠΈ PCG ngayon ipatupad ang interface encoding.binaryappender.
neto
ListenCondig ngayon ay gumagamit ng MPTCP bilang default sa mga system kung saan ito ay suportado (kasalukuyang Linux lamang).
IP ngayon ay nagpapatupad ng interface encoding.TextAppender.
net/http
Ang paghihigpit ay nagbago transportasyon sa natanggap na 1xx na mga tugon sa impormasyon bilang tugon sa kahilingan. Dati ihihinto nito ang kahilingan at magbabalik ng error pagkatapos makatanggap ng higit sa 5 1xx na tugon. Nagbabalik lang ito ngayon ng error kung ang kabuuang sukat ng lahat ng 1xx na tugon ay lumampas sa setting ng config Transport.MaxResponseHeaderBytes.
Gayundin, kapag may tracking hook ang isang kahilingan net/http/httptrace.ClientTrace.Got1xxResponse, ngayon ay walang limitasyon sa kabuuang bilang ng mga sagot 1xx. Ang Got1xxResponse hook ay maaaring magbalik ng error upang ihinto ang kahilingan.
transportasyon ΠΈ server mayroon na ngayong HTTP2 field na nagbibigay-daan sa configuration ng HTTP/2 protocol settings.
Mga bagong field Server.Protocols ΠΈ Transport.Mga Protocol magbigay ng isang simpleng paraan upang i-configure kung aling mga HTTP protocol ang ginagamit ng server o kliyente.
Maaaring i-configure ang server at kliyente upang suportahan ang mga hindi naka-encrypt na koneksyon sa HTTP/2.
Kapag Server.Protocols naglalaman ng UnencrypterHTTP2, ang server ay tatanggap ng HTTP/2 na koneksyon sa mga hindi naka-encrypt na port. Maaaring tanggapin ng server ang HTTP/1 at hindi naka-encrypt na HTTP/2 sa parehong port.
Kapag Transport.Mga Protocol naglalaman ng UnencryptedHTTP2 at hindi naglalaman ng HTTP1, gagamit ang transport ng hindi naka-encrypt na HTTP/2 para sa mga address http://. Kung naka-configure ang isang transport na gumamit ng HTTP/1 at hindi naka-encrypt na HTTP/2, gagamit ito ng HTTP/1.
Ang suporta para sa hindi naka-encrypt na HTTP/2 ay gumagamit ng "HTTP/2 na may Forward-Learning" (RFC 9113, seksyon 3.3). Ang hindi na ginagamit na header na "Upgrade: h2c" ay hindi suportado.
net/netip
Addr, AddrPort ΠΈ Prefix ngayon ipatupad ang mga interface encoding.binaryappender ΠΈ encoding.TextAppender.
net/url
URL ngayon ay nagpapatupad din ng interface encoding.binaryappender.
os/user
Sa Windows kasalukuyan maaari na ngayong gamitin sa Windows Nano Server. Ang pagpapatupad ay na-update upang maiwasan ang paggamit ng mga function mula sa NetApi32 library, na nawawala sa Nano Server.
Sa Windows kasalukuyan, lookup ΠΈ LookupId ngayon ay sumusuporta sa mga sumusunod na built-in na user service account:
- NT AUTHORITYSYSTEM
- NT AUTHORITYLOCAL SERVICE
- NT AUTHORITYNETWORK SERBISYO
Sa Windows kasalukuyan ay makabuluhang pinabilis kapag ang kasalukuyang gumagamit ay sumali sa isang mabagal na domain, na isang karaniwang kaso para sa maraming mga corporate na gumagamit. Ang pagganap ng bagong pagpapatupad ay nasa pagkakasunud-sunod na ngayon ng mga millisecond, kumpara sa nakaraang pagpapatupad, na maaaring tumagal ng ilang segundo, kahit na minuto, upang makumpleto.
Sa Windows kasalukuyan ibinabalik ngayon ang user ng may-ari ng proseso kapag ang kasalukuyang thread ay nagpapanggap bilang isa pang user. Dati nagbalik ito ng error.
regexp
Regexp ngayon ay nagpapatupad ng interface encoding.TextAdapter.
runtime
Tungkulin GOROOT ay hindi na ginagamit ngayon. Sa mga mas bagong kapaligiran, mas gusto mong gamitin ang path ng system upang tukuyin ang "go" na binary, at gamitin ang go env GOROOT upang tukuyin ang GOROOT.
string
Package string nagdaragdag ng ilang mga function para sa pagtatrabaho sa mga iterator:
- Linya Nagbabalik ng iterator sa mga linyang pinaghihiwalay ng bagong linya sa isang string.
- SplitSeq nagbabalik ng isang iterator sa lahat ng mga substring ng isang string na pinaghihiwalay ng isang separator.
- SplitAfterSeq nagbabalik ng iterator sa mga substring ng isang string, nahati pagkatapos ng bawat paglitaw ng separator.
- FieldsSeq nagbabalik ng iterator sa mga substring ng isang string sa paligid ng mga pagkakasunud-sunod ng mga character na whitespace, gaya ng tinukoyunicode.IsSpace
- FieldsFuncSeq Nagbabalik ng iterator sa mga substring ng string sa paligid ng mga sequence ng Unicode code point na nakakatugon sa isang predicate.
i-sync
Pagpapatupad sync.map ay binago upang mapabuti ang pagganap, lalo na para sa mga pagbabago sa diksyunaryo. Halimbawa, ang disjoint set change contention ay mas malamang sa malalaking diksyunaryo, at hindi na ito nangangailangan ng build-up na oras upang makamit ang mababang contention na pag-load ng diksyunaryo.
Kung makatagpo ka ng anumang mga problema, itakda ang GOEXPERIMENT=nosynchashtriemap sa panahon ng pagbuo upang bumalik sa lumang pagpapatupad at mangyaring punan ang form ng problema.
pagsubok
Mga bagong pamamaraan T.Konteksto ΠΈ B.Konteksto ibalik ang isang konteksto na itinatapon pagkatapos makumpleto ang pagsubok at bago isagawa ang mga function ng paglilinis ng pagsubok.
Mga bagong pamamaraan T.Chdir ΠΈ B.Chdir ay maaaring gamitin upang baguhin ang gumaganang direktoryo para sa tagal ng isang pagsubok o benchmark.
teksto/template
Sinusuportahan na ngayon ng mga template ang range-over-func at range-over-int.
oras
oras ngayon ay nagpapatupad ng mga interface encoding.binaryappender ΠΈ encoding.TextAppender.
ports
Linux
Gaya noon inihayag Ayon sa mga tala sa paglabas ng Go 1.23, ang Go 1.24 ay nangangailangan ng bersyon ng Linux kernel 3.2 o mas bago.
Darwin
Ang Go 1.24 ay ang huling release na tatakbo sa macOS 11 Big Sur. Ang Go 1.25 ay mangangailangan ng macOS 12 Monterey o mas bago.
WebAss Assembly
Ang go:wasmexport compiler directive ay idinagdag sa mga Go program para i-export ang mga function sa WebAssembly host.
Sa WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), sinusuportahan ng Go 1.24 ang pagbuo ng Go program bilang reaktor/aklatan sa pamamagitan ng pagtukoy sa build flag -buildmode=c-shared.
Pinapayagan na ngayon ang higit pang mga uri bilang mga uri ng argumento o resulta para sa mga function ng go:wasmimport. Sa partikular, pinapayagan ang bool, string, uintptr at mga pointer sa ilang uri (tingnan ang mga detalye sa dokumentasyon), kasama ang 32-bit at 64-bit na integer at mga floating-point na uri, at hindi ligtas.Pointer, na pinapayagan na. Ang mga uri na ito ay pinapayagan din bilang mga uri ng argumento o resulta para sa mga function ng go:wasmexport.
Ang mga file ng suporta para sa WebAssembly ay inilipat sa lib/wasm mula sa misc/wasm.
Ang paunang memory footprint ay makabuluhang nabawasan, lalo na para sa maliliit na WebAssembly application.
Windows
Ang 32-bit na windows/arm port (GOOS=windows GOARCH=arm) ay minarkahan bilang sira. Mga detalye sa #70705
Pinagmulan: linux.org.ru
