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*
- crypto/sha1: nilai pulangan sha1.Baru kini turut melaksanakan antara muka pengekodan.binaryappender.
- crypto/sha256: nilai dikembalikan sha256.Baru ΠΈ sha256.Baru224 kini juga melaksanakan antara muka pengekodan.binaryappender.
- crypto/sha512: nilai dikembalikan sha512.Baru, sha512.Baru384, sha512.Baru512_224 ΠΈ sha512.Baru512_256, kini turut melaksanakan antara muka pengekodan.binaryappender.
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/*
- hash/adler32: nilai pulangan Baru, kini turut melaksanakan antara muka pengekodan.binaryappender
- hash/crc32: nilai dikembalikan Baru ΠΈ NewIEEE, kini turut melaksanakan antara muka pengekodan.binaryappender
- hash/crc64: nilai pulangan Baru, kini turut melaksanakan antara muka pengekodan.binaryappender
- hash/fnv: nilai dikembalikan New32 Baharu32a New64 Baharu64a New128 ΠΈ Baharu128a, kini turut melaksanakan antara muka pengekodan.binaryappender
- hash/maphash: ciri baharu Setanding ΠΈ TulisSebanding boleh mengira cincang sebarang nilai yang boleh dibandingkan. Ini membolehkan anda mencincang apa sahaja yang boleh digunakan sebagai kunci kamus Go.
log/slog
baru DiscardHandler ialah pengendali yang tidak pernah didayakan dan sentiasa membuang outputnya.
Tahap ΠΈ LevelVar kini melaksanakan antara muka pengekodan.TextAppender.
matematik/*
- matematik/besar: Float, Int ΠΈ Tikus kini melaksanakan antara muka pengekodan.TextAppender.
- matematik/rand: panggilan fungsi peringkat atas ditamatkan Benih tidak lagi memberi kesan. Untuk memulihkan tingkah laku lama, anda boleh menggunakan Persediaan GODEBUG randseednop=0. Lebih banyak konteks dalam tawaran 67273.
- matematik/rand/v2: ChaCha8 ΠΈ PCG kini melaksanakan antara muka pengekodan.binaryappender.
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
