Pergi 1.24

Pergi 1.24

Keluaran baharu bahasa Go, versi 1.24, datang enam bulan selepas itu Pergi 1.23. Kebanyakan perubahan adalah dalam pelaksanaan rantai alat, masa jalan dan perpustakaan. Seperti biasa, keluaran menyediakan janji keserasian Go 1. Pereka bahasa menjangkakan bahawa hampir semua program Go akan terus disusun dan dijalankan seperti sebelum ini.

Perubahan dalam bahasa

Go 1.24 kini menyokong sepenuhnya alias jenis generik: alias jenis boleh diparameterkan sebagai jenis yang diisytiharkan. Butiran dalam spesifikasi bahasa. Buat masa ini, ciri ini boleh dilumpuhkan dengan menetapkan GOEXPERIMENT=noaliastypeparams; Walau bagaimanapun, pilihan aliastypeparams akan dialih keluar dalam Go 1.25.

Tools

Pergi perintah

Modul Go kini boleh menjejaki kebergantungan boleh laku menggunakan arahan alat dalam go.mod. Ini mengalih keluar keperluan untuk penyelesaian sebelumnya untuk menambah alat sebagai import kosong dalam fail yang biasanya dipanggil "tools.go". Perintah alat go kini boleh menjalankan alat ini sebagai tambahan kepada alat yang disertakan dengan Go. Maklumat lanjut boleh didapati di dokumentasi.

Bendera -tool baru untuk go get menyebabkan arahan alat ditambahkan pada modul semasa untuk pakej yang ditentukan selain daripada menambah arahan memerlukan.

baru alat meta-corak merujuk kepada semua alatan dalam modul semasa. Ini boleh digunakan untuk mengemas kini semuanya melalui alat go get, atau untuk memasangnya ke dalam direktori GOBIN anda melalui alat go install.

Boleh laku yang dibuat melalui go run dan gelagat alat go baharu kini dicache dalam cache binaan Go. Ini menjadikan pelancaran berulang mungkin disebabkan oleh peningkatan cache. #69290.

Perintah go build and go install kini menerima bendera -json, yang melaporkan output binaan dan ralat sebagai output JSON berstruktur pada output standard. Butiran format boleh dilihat dalam go help buildjson.

Tambahan pula, go test -json kini melaporkan ralat output dan bina dalam JSON, bercampur dengan hasil ujian JSON. Ia boleh dibezakan dengan jenis Tindakan baharu, tetapi jika ia menyebabkan masalah dalam sistem integrasi ujian, anda boleh kembali kepada output teks binaan melalui Persediaan GODEBUG gotestjsonbuildtext=1.

Pembolehubah persekitaran GOAUTH baharu menyediakan cara yang fleksibel untuk membenarkan penarikan modul persendirian. Anda boleh melihat butiran dalam go help goauth.

Perintah go build kini dipasang versi modul utama dalam binari yang disusun, berdasarkan teg dan/atau komit kawalan versi. Akhiran +kotor akan ditambah jika terdapat perubahan tanpa komitmen. Bendera -buildvcs=false boleh digunakan untuk menghilangkan maklumat kawalan versi daripada binari.

New Persediaan GODEBUG rangkaian alat=1 kini boleh digunakan untuk menjejaki proses pemilihan rantai alat dalam arahan go.

Cgo

Cgo menyokong anotasi baharu untuk fungsi C untuk meningkatkan prestasi masa jalan. #cgo noescape cFunctionName memberitahu pengkompil bahawa memori yang dihantar ke fungsi C cFunctionName tidak terlepas. #cgo nocallback cFunctionName memberitahu pengkompil bahawa fungsi C cFunctionName tidak memanggil semula sebarang fungsi Go. Maklumat lanjut boleh didapati di dokumentasi cgo.

Cgo pada masa ini enggan menyusun panggilan ke fungsi C yang mempunyai berbilang pengisytiharan yang tidak serasi. Contohnya, jika f diisytiharkan sebagai kedua-dua void f(int) dan void f(double), cgo akan melaporkan ralat dan bukannya menghasilkan urutan panggilan yang tidak sah f(0). Baharu dalam keluaran ini dipertingkatkan pengesanan keadaan ralat ini apabila pengisytiharan tidak serasi muncul dalam fail yang berbeza. #67699.

Objdump

Alat objdump kini menyokong pembongkaran pada LoongArch 64-bit (GOARCH=loong64), RISC-V (GOARCH=riscv64) dan S390X (GOARCH=s390x).

Lemak

Penganalisis ujian baharu melaporkan ralat biasa dalam pengisytiharan ujian, fuzzer, penanda aras dan contoh dalam suite ujian, seperti nama yang cacat, tandatangan tidak sah atau contoh yang mendokumenkan pengecam yang tidak wujud. Beberapa ralat ini boleh menyebabkan ujian gagal.

Penghurai printf sedia ada kini melaporkan diagnostik untuk panggilan dalam bentuk fmt.Printf(s), dengan s ialah rentetan format bukan malar tanpa argumen lain. Panggilan sedemikian hampir selalu ralat, kerana nilai s mungkin mengandungi % aksara; gunakan fmt.Cetak sebaliknya. 60529. Semakan ini cenderung untuk mencari perkara dalam kod sedia ada, dan oleh itu hanya digunakan apabila versi bahasa (seperti yang ditentukan oleh arahan go fail go.mod atau komen `//go:build`) sekurang-kurangnya Go 1.24, untuk mengelakkan menyebabkan pemecahan integrasi yang lama apabila menaik taraf kepada rantai alat Go 1.24.

Penganalisis buildtag sedia ada kini melaporkan diagnostik apabila terdapat buildtag yang salah had binaan versi lama Pergi dalam arahan //go:build. Contohnya, //go:build go1.23.1 merujuk kepada pelepasan mata; sebaliknya gunakan //go:build go1.23. #64127.

Penganalisis kunci salinan sedia ada kini melaporkan diagnostik apabila pembolehubah diisytiharkan dalam gelung "untuk" tiga kali ganda, seperti untuk i := iter(); selesai(i); i = seterusnya(i) { … }, mengandungi penyegerakan.Loker, seperti penyegerakan.Mutex. Pergi 1.22 menukar tingkah laku gelung tersebut untuk mencipta pembolehubah baharu bagi setiap lelaran, menyalin nilai daripada lelaran sebelumnya; Penyalinan ini tidak selamat untuk kunci. #66387.

GOCACHEPROG

Perduaan cmd/go dalaman dan mekanisme caching ujian kini boleh dilaksanakan oleh proses anak yang melaksanakan protokol JSON antara alat cmd/go dan proses anak yang dinamakan oleh pembolehubah persekitaran GOCACHEPROG. Sebelum ini ia adalah untuk GOEXPERIMENT. Butiran protokol boleh dilihat dalam dokumentasi.

Masa siap

Beberapa peningkatan prestasi masa jalan telah mengurangkan overhed CPU sebanyak 2-3% secara purata merentas set penanda aras yang mewakili. Keputusan mungkin berbeza bergantung pada aplikasi. Penambahbaikan ini termasuk pelaksanaan peta terbina dalam baharu berdasarkan Jadual Sweden, peruntukan memori objek kecil yang lebih cekap, dan pelaksanaan masa jalan dalaman baharu mutex.

Pelaksanaan peta terbina dalam baharu dan mutex masa jalan dalaman baharu boleh dilumpuhkan dengan menetapkan masing-masing GOEXPERIMENT=noswissmap dan GOEXPERIMENT=nospinbitmutex pada masa binaan.

Penyusun

Pengkompil telah melarang mentakrifkan kaedah baharu dengan jenis penerima yang dijana oleh cgo, tetapi adalah mungkin untuk mengatasi sekatan ini melalui alias jenis. Go 1.24 kini sentiasa melaporkan ralat jika penerima menandakan jenis yang dijana cgo, sama ada secara langsung atau tidak langsung (melalui alias jenis).

Penghubung

Π›ΠΈΠ½ΠΊΠ΅Ρ€ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сборки GNU (запись ELF NT_GNU_BUILD_ID) Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ELF ΠΈ UUID (ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Mach-O LC_UUID) Π½Π° macOS ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ сборки ΠΈΠ»ΠΈ UUID выводится ΠΈΠ· ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° сборки Go. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Ρ„Π»Π°Π³ΠΎΠΌ Π»ΠΈΠ½ΠΊΠ΅Ρ€Π° -B none, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Ρ„Π»Π°Π³ΠΎΠΌ Π»ΠΈΠ½ΠΊΠ΅Ρ€Π° -B 0xNNNN с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Promosi

Seperti yang dinyatakan dalam Nota keluaran Go 1.22, Go 1.24 kini memerlukan Go 1.22.6 atau lebih baru untuk dipasang. Pembangun menjangkakan bahawa Go 1.26 memerlukan pelepasan mata Go 1.24 atau lebih baru untuk dilancarkan.

Perpustakaan Standard

Akses sistem fail terhad direktori

Jenis baru os.root Menyediakan keupayaan untuk melaksanakan operasi sistem fail dalam direktori tertentu.

Fungsi os.OpenRoot membuka direktori dan kembali os.root. Kaedah pada os.root beroperasi dalam direktori itu dan tidak membenarkan laluan merujuk kepada lokasi di luar direktori, termasuk yang mengikuti pautan simbolik di luar direktori. Kaedah pada os.Root mencerminkan kebanyakan operasi sistem fail yang tersedia dalam pakej os, termasuk, sebagai contoh, os.Root.Buka, os.Root.Create, os.Root.Mkdir ΠΈ os.Root.Stat.

Ciri penanda aras baharu

Penanda aras kini boleh menggunakan kaedah yang lebih pantas dan kurang ralat pengujian.B.Gelung untuk mengulangi penanda aras seperti untuk b.Loop() { … } dan bukannya struktur gelung biasa yang melibatkan bN seperti untuk julat bN Ini menawarkan dua kelebihan ketara:

  • Fungsi penanda aras dilaksanakan tepat sekali setiap kiraan, jadi langkah persediaan dan pembersihan yang mahal hanya dilaksanakan sekali.
  • Parameter panggilan fungsi dan keputusan hidup, menghalang pengkompil daripada mengoptimumkan badan gelung sepenuhnya.

Penambahbaikan pemuktamad

Ciri baru runtime.AddCleanup ialah mekanisme penyiapan yang lebih fleksibel, lebih cekap dan kurang terdedah kepada ralat daripada runtime.SetFinalizer. AddCleanup melampirkan fungsi pembersihan pada objek yang akan dijalankan sebaik sahaja objek menjadi tidak tersedia. Walau bagaimanapun, tidak seperti SetFinalizer, berbilang pembersihan boleh dilampirkan pada satu objek, pembersihan boleh dilampirkan pada penunjuk dalaman, pembersihan lazimnya tidak menyebabkan kebocoran apabila objek membentuk kitaran dan pembersihan tidak melambatkan deallokasi objek atau objek yang ditunjukkannya. Kod baharu sepatutnya memilih AddCleanup berbanding SetFinalizer.

Pakej baru yang lemah

Pakej baru lemah memberikan petunjuk yang lemah.

Penunjuk lemah ialah primitif peringkat rendah yang disediakan untuk mencipta struktur cekap ingatan seperti kamus lemah untuk nilai pemetaan, kamus kanonik untuk apa-apa yang tidak diliputi oleh pakej. unik, dan pelbagai jenis cache. Untuk menyokong kes penggunaan ini, keluaran ini turut menyediakan runtime.AddCleanup ΠΈ maphash.Setanding.

Pakej crypto/mlkem baharu

Pakej baru crypto/mlkem melaksanakan ML-KEM-768 dan ML-KEM-1024.

ML-KEM ialah mekanisme pertukaran kunci pasca-kuantum, dahulunya dikenali sebagai Kyber dan dinyatakan dalam FIPS 203.

Pakej baharu crypto/hkdf, crypto/pbkdf2 dan crypto/sha3

Pakej baru crypto/hkdf melaksanakan fungsi terbitan utama "Ekstrak-dan-Kembangkan" berasaskan HMAC HKDF seperti yang ditakrifkan dalam RFC 5869.

Pakej baru crypto/pbkdf2 melaksanakan fungsi terbitan kunci berasaskan kata laluan PBKDF2 seperti yang ditakrifkan dalam RFC 8018.

Pakej baru crypto/sha3 melaksanakan fungsi cincang SHA-3 dan fungsi output boleh diperluas SHAKE dan cSHAKE seperti yang ditakrifkan dalam FIPS 202.

Ketiga-tiga pakej adalah berdasarkan pakej golang.org/x/crypto/… sedia ada.

FIPS 140-3 Pematuhan

Keluaran ini termasuk satu set mekanisme baharu untuk memastikan pematuhan FIPS 140-3.

Modul kripto Go ialah satu set pakej perpustakaan standard dalaman yang digunakan secara telus untuk melaksanakan algoritma FIPS 140-3 yang diluluskan. Aplikasi tidak memerlukan perubahan untuk menggunakan modul kripto Go untuk algoritma yang diluluskan.

Pembolehubah persekitaran baharu GOFIPS140 boleh digunakan untuk memilih versi modul kripto Go untuk digunakan dalam binaan. baru Persediaan GODEBUG fips140 boleh digunakan untuk mendayakan mod FIPS 140-3 pada masa jalan.

Go 1.24 termasuk modul Go crypto v1.0.0, yang sedang diuji dengan makmal bertauliah CMVP.

Ujian/penyelarasan pakej eksperimen baharu

Pakej percubaan baharu pengujian/synctest Menyediakan sokongan untuk menguji kod serentak.

  • Fungsi synctest.run menjalankan sekumpulan goroutine dalam "gelembung" terpencil. Dalam gelembung fungsi pakej masa beroperasi pada jam palsu.
  • Fungsi synctest.tunggu tunggu sehingga semua goroutine disekat dalam gelembung semasa.

Butiran boleh didapati dalam dokumentasi pakej.

Pakej synctest adalah percubaan dan mesti didayakan dengan menetapkan GOEXPERIMENT=synctest. API pakej mungkin berubah dalam keluaran akan datang. DALAM #67434 Anda boleh melihat butiran lanjut dan memberikan maklum balas.

Perubahan kecil dalam perpustakaan

arkib

Pelaksanaan (*Writer.AddFS) dalam arkib/zip dan arkib/tar kini menulis pengepala direktori untuk direktori kosong.

bait

Pakej bait menambah beberapa fungsi yang berfungsi dengan iterator:

  • Talian Mengembalikan iterator atas rentetan yang dipisahkan baris baharu dalam kepingan bait.
  • SplitSeq mengembalikan iterator ke atas semua subslices hirisan bait yang dipisahkan oleh pemisah.
  • SplitAfterSeq mengembalikan lelaran ke atas subslices kepingan bait, berpecah selepas setiap kejadian pemisah.
  • FieldsSeq mengembalikan lelaran ke atas subslices kepingan bait di sekeliling jujukan aksara ruang, seperti yang ditakrifkan unicode.IsSpace
  • FieldsFuncSeq mengembalikan lelaran ke atas subslices kepingan bait di sekeliling jujukan mata kod Unicode yang memenuhi predikat.

crypto/aes

Nilai pulangan NewChipher tidak lagi melaksanakan kaedah NewCTR, NewGCM, NewCBCEncrypter dan NewCBCDecrypter. Kaedah ini tidak didokumenkan dan tidak tersedia pada semua seni bina. Sekarang maknanya Menyekat mesti dihantar terus ke fungsi yang sesuai kripto/sifir. Pada masa ini, crypto/cipher masih menyemak kaedah ini pada nilai Sekat, walaupun ia tidak lagi disokong oleh perpustakaan standard.

kripto/sifir

Ciri baru NewGCMWithRandomNonce pulangan AeAD, yang melaksanakan AES-GCM dengan menjana nonce rawak semasa Seal dan menambahkannya kepada teks sifir.

РСализация Stream, kembali CTR baharu apabila digunakan dengan crypto/aes kini beberapa kali lebih pantas pada amd64 dan arm64.

NewOFB, NewCFBEncrypter ΠΈ NewCFBDecrypter kini diisytiharkan usang. Mod OFB dan CFB tidak disahkan, yang secara amnya membenarkan serangan aktif untuk memanipulasi dan memulihkan teks biasa. Aplikasi disyorkan untuk digunakan AeAD sebagai balasan. Jika mod tidak disahkan Stream perlu, boleh digunakan CTR baharu sebagai balasan.

crypto/ecdsa

PrivateKey.Sign kini mencipta tandatangan deterministik mengikut RFC 6979, jika sumber rawak adalah sifar.

crypto/md5

Nilai pulangan md5.baru, kini turut melaksanakan antara muka pengekodan.binaryappender.

kripto/rand

Fungsi Baca kini menjamin tiada kegagalan. Jika Baca menghadapi ralat semasa membaca Pembaca, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±Π΅Π·Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Reader Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ всСгда Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, поэтому это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Reader. Одним ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ядра Linux Π΄ΠΎ вСрсии 3.17, Π³Π΄Π΅ ΡƒΠΌΠΎΠ»Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Reader всё Π΅Ρ‰Ρ‘ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ /dev/urandom ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ΡƒΠ΄Π°Ρ‡Ρƒ.

Pada Linux 6.11 ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ Reader Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСмный Π²Ρ‹Π·ΠΎΠ² getrandom Ρ‡Π΅Ρ€Π΅Π· vDSO. Π­Ρ‚ΠΎ Π² нСсколько Ρ€Π°Π· быстрСС, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ‡Ρ‚Π΅Π½ΠΈΠΉ.

Pada OpenBSD Reader kini menggunakan arc4random_buf(3).

Ciri baru teks kini boleh menjana rentetan teks rawak selamat secara kriptografi.

crypto/rsa

GenerateKey kini mengembalikan ralat jika panjang kunci kurang daripada 1024 bit diminta. Semua kaedah Tandatangan, Sahkan, Sulit dan Nyahsulit kini mengembalikan ralat jika digunakan dengan saiz kunci kurang daripada 1024 bit. Kunci sedemikian tidak selamat dan tidak boleh digunakan. Menyediakan GODEBUG rsa1024min=0 memulihkan tingkah laku lama, tetapi pembangun Go mengesyorkan melakukan ini hanya apabila perlu dan hanya dalam ujian, contohnya dengan menambah baris //go:debug rsa1024min=0 pada fail ujian. baru contoh GenerateKey menyediakan kunci ujian standard 2024-bit yang mudah digunakan.

Ia kini lebih selamat dan lebih cekap untuk membuat panggilan PrivateKey.Pracompute kepada PrivateKey.Sahkan. Prapengiraan kini lebih pantas dengan kehadiran sebahagiannya diisi PrecomputedValues, contohnya apabila mengekstrak kunci daripada JSON.

Pakej kini menolak lebih banyak kunci tidak sah walaupun apabila Sahkan tidak dipanggil, dan GenerateKey kini boleh mengembalikan ralat baharu untuk sumber rawak yang rosak. Padang Prima ΠΈ Diprakira struktur PrivateKey kini digunakan dan disahkan walaupun beberapa nilai hilang. Terdapat juga perubahan pada crypto/x509 untuk menghurai dan mengekstrak kunci RSA, yang diterangkan di bawah.

TandatanganPKCS1v15 ΠΈ SahkanPKCS1v15 kini menyokong SHA-512/224, SHA-512/256 dan SHA-3.

GenerateKey kini menggunakan kaedah yang sedikit berbeza untuk menjana eksponen persendirian (fungsi Carmichael dan bukannya fungsi Euler). Aplikasi jarang yang menjana semula kunci secara luaran daripada nombor perdana sahaja mungkin menghasilkan hasil yang berbeza tetapi serasi.

Operasi pada kunci awam dan peribadi kini sehingga dua kali lebih pantas pada wasm.

crypto/sha*

kripto/halus

Ciri baru WithDataIndependentTiming membolehkan pengguna melaksanakan fungsi dengan ciri khusus seni bina didayakan yang memastikan arahan tertentu tidak diubah berbanding dengan masa nilai data. Ini boleh digunakan untuk memastikan kod yang ditulis untuk dijalankan dalam masa tetap tidak dioptimumkan oleh fungsi peringkat pemproses supaya ia berjalan dalam masa berubah. Pada masa ini WithDataIndependentTiming menggunakan bit PSTATE.DIT pada arm64 dan tidak melakukan apa-apa pada semua seni bina lain. Menyediakan GODEBUG dataindependenttiming=1 mendayakan mod DIT untuk keseluruhan program Go.

Output XORBytes mesti bertindih sepenuhnya atau tidak sama sekali dengan input. Sebelum ini tingkah laku itu tidak ditentukan sebaliknya, sedangkan kini XORBytes akan panik.

crypto/tls

Pelayan TLS kini menyokong Encrypted Client Hello (ECH). Ciri ini boleh didayakan dengan mengisi medan. Config.EncryptedClientHelloKeys.

Mekanisme Pertukaran Kunci Pasca Kuantum Baharu X25519MLKEM768 kini disokong dan didayakan secara lalai apabila Config.CurvePreferences adalah tiada. Menyediakan GODEBUG tlsmlkem=0 mengembalikan lalai.

Sokongan untuk pertukaran kunci X25519Kyber768Draft00 percubaan telah dialih keluar.

Pesanan pertukaran kunci kini dikendalikan sepenuhnya oleh pakej crypto/tls. Pesanan Config.CurvePreferences kini diabaikan dan kandungannya hanya digunakan untuk menentukan pertukaran kunci yang perlu disertakan apabila medan diisi.

Medan baharu ClientHelloInfo.Extensions Menyenaraikan senarai pengecam sambungan yang diterima dalam mesej Hello Pelanggan. Ini boleh berguna untuk cap jari pelanggan TLS.

crypto/x509

Menyediakan GODEBUG x509sha1 telah dialih keluar. Pensijilan.Sahkan tidak lagi menyokong tandatangan berasaskan SHA-1.

OID kini melaksanakan antara muka pengekodan.binaryappender ΠΈ pengekodan.TextAppender.

Medan dasar sijil lalai telah ditukar daripada Sijil.Pengenalpasti Polisi pada Sijil.Dasar. Apabila menghuraikan sijil, kedua-dua medan akan diisi, tetapi apabila membuat dasar sijil, ia akan diambil daripada medan Sijil.Dasar dan bukannya Sijil.DasarPengenalpasti. Perubahan ini boleh dikembalikan. Persediaan GODEBUG x509usepolicies=0.

CiptaSijil kini akan menjana nombor siri menggunakan kaedah yang mematuhi RFC 5280 apabila menghantar medan templat Sijil.Nombor Siri tiada, bukannya terhempas.

Sijil.Sahkan kini menyokong pengesahan dasar seperti yang ditakrifkan dalam RFC 5280 dan RFC 9618. Medan baharu VerifyOptions.CertificatePolicies boleh ditetapkan kepada set dasar yang boleh diterima OIDs. Hanya rantai sijil dengan graf dasar yang sah akan dikembalikan daripada Sijil.Sahkan.

MarshalPKCS8PrivateKey kini mengembalikan ralat dan bukannya mendapatkan semula kunci RSA yang tidak sah. (MarshalPKCS1PrivateKey tidak mempunyai pemulangan ralat dan tingkah lakunya apabila kunci tidak sah diberikan kekal tidak ditentukan.)

ParsePKCS1PrivateKey ΠΈ ParsePKCS8PrivateKey kini menggunakan dan mengesahkan nilai CRT yang dikodkan, jadi boleh menolak kunci RSA yang tidak sah yang sebelum ini diterima. Penggunaan Tetapan GODEBUG x509rsacrt=0 kembali kepada pengiraan semula nilai CRT.

nyahpepijat/bunian

Pakej nyahpepijat/bunian Menambah sokongan untuk mengendalikan versi simbol dalam fail ELF (Format Boleh Laksana dan Boleh Paut) dinamik. Kaedah baru Fail.DynamicVersions Mengembalikan senarai versi dinamik yang ditakrifkan dalam fail ELF. Kaedah baru File.DynamicVersionNeeds Mengembalikan senarai versi dinamik yang diperlukan oleh fail ELF ini yang ditakrifkan dalam objek ELF lain. Akhirnya, bidang baru Simbol.HasVersion ΠΈ Symbol.VersionIndex menunjukkan versi simbol.

pengekodan

Dua antara muka baharu TextAppender ΠΈ BinaryAppender telah diperkenalkan untuk menambah teks atau perwakilan binari objek pada kepingan bait. Antara muka ini menyediakan fungsi yang sama seperti TextMarshaler ΠΈ BinaryMarshaler, tetapi bukannya memperuntukkan kepingan baharu setiap kali, mereka menambahkan data terus pada kepingan sedia ada. Antara muka ini sedang dilaksanakan oleh jenis perpustakaan standard yang sudah melaksanakan TextMarshaler dan/atau BinaryMarshaler.

pengekodan/json

Semasa membina, medan struktur dengan pilihan omitzero baharu dalam teg medan struktur akan diabaikan jika nilainya ialah sifar. Jika jenis medan mempunyai kaedah bool IsZero(), ia akan digunakan untuk menentukan sama ada nilainya ialah sifar. Jika tidak nilai akan menjadi sifar jika ia nilai nol untuk jenisnya. Teg medan omitzero adalah lebih bersih dan kurang terdedah kepada ralat berbanding omitempty apabila tujuannya adalah untuk meninggalkan nilai nol. Khususnya, tidak seperti omitempty, omitzero meninggalkan sifar masa.masa nilai, yang merupakan sumber masalah yang biasa.

Jika kedua-dua omitempty dan omitzero dinyatakan, medan akan ditinggalkan jika nilai kosong atau sifar (atau kedua-duanya).

UnmarshalTypeError.Field kini termasuk struktur terbina dalam untuk menyediakan mesej ralat yang lebih terperinci.

pergi/jenis

Semua struktur data go/types yang mendedahkan jujukan pasangan kaedah, seperti Len() int dan At(int) T, kini juga mempunyai kaedah yang mengembalikan iterator, membenarkan kod yang lebih mudah seperti ini:

params := fn.Type.(*types.Signature).Params() for i := 0; i < params.Len(); i++ { use(params.At(i)) }

Pada yang ini:

untuk param := julat fn.Tandatangan().Params().Pembolehubah() { use(param) }

Kaedah: Antaramuka.Jenis Terbenam Antara Muka.Kaedah Eksplisit Antaramuka.Kaedah MethodSet.Methods Dinamakan.Kaedah Skop.Kanak-kanak Struktur.Bidang Tuple.Pembolehubah TypeList.Types TypeParamList.TypeParams Kesatuan.Syarat

hash/*

log/slog

baru DiscardHandler ialah pengendali yang tidak pernah didayakan dan sentiasa membuang outputnya.

Tahap ΠΈ LevelVar kini melaksanakan antara muka pengekodan.TextAppender.

matematik/*

bersih

ListenCondig Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ MPTCP ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π° систСмах, Π³Π΄Π΅ это поддСрТиваСтся (ΠΏΠΎΠΊΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Linux).

IP kini melaksanakan antara muka pengekodan.TextAppender.

bersih / http

Sekatan telah berubah Pengangkutan kepada respons maklumat 1xx yang diterima sebagai tindak balas kepada permintaan itu. Sebelum ini ini akan menghentikan permintaan dan mengembalikan ralat selepas menerima lebih daripada 5 respons 1xx. Ini kini hanya mengembalikan ralat jika jumlah saiz semua respons 1xx melebihi tetapan konfigurasi Transport.MaxResponseHeaderBytes.

Juga, apabila permintaan mempunyai cangkuk penjejakan net/http/httptrace.ClientTrace.Got1xxResponse, kini tiada had jumlah jawapan 1xx. Cangkuk Got1xxResponse boleh mengembalikan ralat untuk menghentikan permintaan.

Pengangkutan ΠΈ Server kini mempunyai medan HTTP2 yang membenarkan konfigurasi tetapan protokol HTTP/2.

Medan baharu Pelayan.Protokol ΠΈ Pengangkutan.Protokol menyediakan cara mudah untuk mengkonfigurasi protokol HTTP yang digunakan oleh pelayan atau pelanggan.

Pelayan dan klien boleh dikonfigurasikan untuk menyokong sambungan HTTP/2 yang tidak disulitkan.

Apabila Pelayan.Protokol mengandungi UnencrypterHTTP2, pelayan akan menerima sambungan HTTP/2 pada port yang tidak disulitkan. Pelayan boleh menerima HTTP/1 dan HTTP/2 tidak disulitkan pada port yang sama.

Apabila Pengangkutan.Protokol mengandungi UnencryptedHTTP2 dan tidak mengandungi HTTP1, pengangkutan akan menggunakan HTTP/2 yang tidak disulitkan untuk alamat http://. Jika pengangkutan dikonfigurasikan untuk menggunakan HTTP/1 dan HTTP/2 tidak disulitkan, ia akan menggunakan HTTP/1.

Sokongan untuk HTTP/2 yang tidak disulitkan menggunakan "HTTP/2 dengan Pembelajaran Hadapan" (RFC 9113, bahagian 3.3). Tajuk "Naik taraf: h2c" yang ditamatkan tidak disokong.

net/netip

Addr, AddrPort ΠΈ Awalan kini melaksanakan antara muka pengekodan.binaryappender ΠΈ pengekodan.TextAppender.

net/url

URL kini turut melaksanakan antara muka pengekodan.binaryappender.

os/pengguna

Π’ Windows Arus Elektrik Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π² Windows Nano Server. РСализация Π±Ρ‹Π»Π° обновлСния для избСТания использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ NetApi32, которая отсутствуСт Π² Nano Server.

Π’ Windows Arus Elektrik, Lookup ΠΈ LookupId kini menyokong akaun perkhidmatan pengguna terbina dalam berikut:

  • SISTEM KEBENARAN NT
  • NT AUTHORITYLOCAL SERVICE
  • PERKHIDMATAN RANGKAIAN NT AUTHORITYNETWORK

Π’ Windows Arus Elektrik telah dipercepatkan dengan ketara apabila pengguna semasa disambungkan ke domain perlahan, yang merupakan kes biasa bagi kebanyakan pengguna korporat. Prestasi pelaksanaan baharu kini dalam urutan milisaat, berbanding dengan pelaksanaan sebelumnya, yang mungkin mengambil masa beberapa saat, malah beberapa minit, untuk diselesaikan.

Π’ Windows Arus Elektrik kini mengembalikan pengguna pemilik proses apabila urutan semasa menyamar sebagai pengguna lain. Sebelum ini ini mengembalikan ralat.

regexp

Regexp kini melaksanakan antara muka pengekodan.TextAdapter.

runtime

Fungsi GOROOT kini tidak digunakan lagi. Dalam persekitaran yang lebih baharu, anda harus memilih untuk menggunakan laluan sistem untuk mentakrifkan perduaan "go", dan menggunakan go env GOROOT untuk mentakrifkan GOROOT.

tali

Pakej tali menambah beberapa fungsi untuk bekerja dengan iterator:

  • Talian Mengembalikan lelaran ke atas baris yang dipisahkan baris baharu dalam rentetan.
  • SplitSeq mengembalikan iterator ke atas semua subrentetan rentetan yang dipisahkan oleh pemisah.
  • SplitAfterSeq mengembalikan lelaran ke atas subrentetan rentetan, berpecah selepas setiap kejadian pemisah.
  • FieldsSeq mengembalikan lelaran ke atas subrentetan rentetan di sekeliling jujukan aksara ruang putih, seperti yang ditakrifkanunicode.IsSpace
  • FieldsFuncSeq Mengembalikan lelaran di atas subrentetan rentetan di sekeliling jujukan titik kod Unicode yang memenuhi predikat.

menyegerakkan

РСализация sync.map telah diubah untuk meningkatkan prestasi, terutamanya untuk perubahan kamus. Sebagai contoh, perbalahan perubahan set terputus berkemungkinan kecil pada kamus besar dan ia tidak lagi memerlukan masa membina untuk mencapai beban kamus perbalahan yang rendah.

Jika anda menghadapi sebarang masalah, tetapkan GOEXPERIMENT=nosynchashtriemap semasa membina untuk kembali kepada pelaksanaan lama dan sila mengisi borang masalah.

ujian

Kaedah baru T.Konteks ΠΈ B.Konteks kembalikan konteks yang dibuang selepas ujian selesai dan sebelum fungsi pembersihan ujian dilaksanakan.

Kaedah baru T.Chdir ΠΈ B.Chdir boleh digunakan untuk menukar direktori kerja untuk tempoh ujian atau penanda aras.

teks/templat

Templat kini menyokong range-over-func dan range-over-int.

masa

Masa kini melaksanakan antara muka pengekodan.binaryappender ΠΈ pengekodan.TextAppender.

pelabuhan

Linux

Seperti yang berlaku diumumkan Π² Π·Π°ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… Ρ€Π΅Π»ΠΈΠ·Π° Go 1.23, Go 1.24 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ядро Linux вСрсии 3.2 ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅.

Darwin

Go 1.24 являСтся послСдним Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° macOS 11 Big Sur. Go 1.25 Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ macOS 12 Monterey ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅.

webassembly

Arahan pengkompil go:wasmexport telah ditambahkan pada program Go untuk mengeksport fungsi ke hos WebAssembly.

Dalam Pratonton Antara Muka Sistem WebAssembly 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 menyokong membina program Go sebagai reaktor/perpustakaan dengan menyatakan bendera binaan -buildmode=c-shared.

Lebih banyak jenis kini dibenarkan sebagai jenis hujah atau hasil untuk fungsi go:wasmimport. Khususnya, bool, rentetan, uintptr dan penunjuk kepada jenis tertentu dibenarkan (lihat butiran dalam dokumentasi), bersama-sama dengan jenis integer dan titik terapung 32-bit dan 64-bit, dan tidak selamat.Penunjuk, yang sudah dibenarkan. Jenis ini juga dibenarkan sebagai jenis hujah atau hasil untuk fungsi go:wasmexport.

Fail sokongan untuk WebAssembly telah dialihkan ke lib/wasm daripada misc/wasm.

Jejak memori awal dikurangkan dengan ketara, terutamanya untuk aplikasi WebAssembly yang kecil.

Windows

Port tingkap/lengan 32-bit (GOOS=windows GOARCH=arm) telah ditandakan sebagai rosak. Butiran dalam #70705

Sumber: linux.org.ru

Beli pengehosan yang boleh dipercayai untuk tapak dengan perlindungan DDoS, pelayan VPS VDS πŸ”₯ Beli pengehosan laman web yang boleh dipercayai dengan perlindungan DDoS, pelayan VPS VDS | ProHoster