Rilis baru bahasa Go, versi 1.24, hadir enam bulan setelah Pergi 1.23. Sebagian besar perubahan ada pada implementasi toolchain, runtime, dan pustaka. Seperti biasa, rilis ini menyediakan janji kompatibilitas Go 1. Perancang bahasa berharap bahwa hampir semua program Go akan terus dikompilasi dan berjalan seperti sebelumnya.
Perubahan bahasa
Go 1.24 sekarang sepenuhnya mendukung alias tipe generik: alias tipe dapat diparameterisasi sebagai tipe yang dideklarasikan. Detail dalam spesifikasi bahasa. Untuk saat ini, fitur ini dapat dinonaktifkan dengan menyetel GOEXPERIMENT=noaliastypeparams; Namun, opsi aliastypeparams akan dihapus di Go 1.25.
Alat
Perintah pergi
Modul Go sekarang dapat melacak dependensi yang dapat dieksekusi menggunakan arahan alat di go.mod. Hal ini menghapus kebutuhan untuk solusi sebelumnya dengan menambahkan alat sebagai impor kosong dalam file yang biasanya disebut βtools.goβ. Perintah go tool sekarang dapat menjalankan alat-alat ini sebagai tambahan terhadap alat-alat yang disertakan dalam Go. Informasi lebih lanjut dapat ditemukan di dokumentasi.
Bendera -tool baru untuk go get menyebabkan direktif tool ditambahkan ke modul saat ini untuk paket yang ditentukan selain menambahkan direktif require.
Baru alat meta-pola merujuk ke semua alat di modul saat ini. Ini dapat digunakan untuk memperbarui semuanya melalui alat go get, atau menginstalnya ke direktori GOBIN Anda melalui alat go install.
File yang dapat dieksekusi yang dibuat melalui go run dan perilaku alat go yang baru sekarang di-cache dalam cache build Go. Hal ini memungkinkan peluncuran berulang kali karena cache yang meningkat. #69290.
Perintah go build dan go install sekarang menerima tanda -json, yang melaporkan keluaran dan kesalahan build sebagai keluaran JSON terstruktur pada keluaran standar. Rincian format dapat dilihat di go help buildjson.
Lebih jauh lagi, go test -json sekarang melaporkan keluaran dan kesalahan build dalam JSON, yang dicampur dengan JSON hasil pengujian. Mereka dapat dibedakan berdasarkan jenis Tindakan yang baru, tetapi jika hal tersebut menyebabkan masalah dalam sistem integrasi pengujian, Anda dapat kembali ke keluaran teks dari build melalui Pengaturan GODEBUG gotestjsonbuildtext=1.
Variabel lingkungan GOAUTH yang baru menyediakan cara fleksibel untuk mengotorisasi penarikan modul privat. Anda dapat melihat detailnya di go help goauth.
Perintah go build sekarang sudah terinstal versi modul utama dalam biner yang dikompilasi, berdasarkan tag dan/atau komit kontrol versi. Sufiks +dirty akan ditambahkan jika ada perubahan yang belum dikomit. Bendera -buildvcs=false dapat digunakan untuk menghilangkan informasi kontrol versi dari biner.
Baru Pengaturan GODEBUG jejak rantai alat=1 sekarang dapat digunakan untuk melacak proses pemilihan rantai alat dalam perintah go.
Cgo
Cgo mendukung anotasi baru untuk fungsi C guna meningkatkan kinerja runtime. #cgo noescape cFunctionName memberi tahu kompiler bahwa memori yang diteruskan ke fungsi C cFunctionName tidak di-escape. #cgo nocallback cFunctionName memberi tahu kompiler bahwa fungsi C cFunctionName tidak memanggil kembali fungsi Go apa pun. Informasi lebih lanjut dapat ditemukan di dokumentasi cgo.
Cgo saat ini menolak untuk mengkompilasi panggilan ke fungsi C yang memiliki beberapa deklarasi yang tidak kompatibel. Misalnya, jika f dideklarasikan sebagai void f(int) dan void f(double), cgo akan melaporkan kesalahan alih-alih mungkin menghasilkan urutan pemanggilan f(0) yang tidak valid. Yang baru dalam rilis ini adalah peningkatan deteksi kondisi kesalahan ini ketika deklarasi yang tidak kompatibel muncul di file yang berbeda. #67699.
Objdump
Alat objdump sekarang mendukung pembongkaran pada LoongArch 64-bit (GOARCH=loong64), RISC-V (GOARCH=riscv64), dan S390X (GOARCH=s390x).
Lemak
Penganalisis pengujian baru melaporkan kesalahan umum dalam pengujian, fuzzer, benchmark, dan deklarasi contoh dalam rangkaian pengujian, seperti nama yang salah bentuk, tanda tangan tidak valid, atau contoh yang mendokumentasikan pengenal yang tidak ada. Beberapa kesalahan ini dapat menyebabkan pengujian gagal.
Parser printf yang ada sekarang melaporkan diagnostik untuk panggilan dalam bentuk fmt.Printf(s), di mana s adalah string format non-konstan tanpa argumen lain. Panggilan semacam itu hampir selalu merupakan kesalahan, karena nilai s mungkin berisi karakter %; gunakan fmt.Print sebagai gantinya. 60529. Pemeriksaan ini cenderung menemukan hal-hal dalam kode yang ada, dan oleh karena itu hanya diterapkan ketika versi bahasa (seperti yang ditetapkan oleh direktif go dari file go.mod atau komentar `//go:build`) setidaknya Go 1.24, untuk menghindari menyebabkan putusnya integrasi yang lama ketika melakukan pemutakhiran ke rantai alat Go 1.24.
Penganalisis tag build yang ada sekarang melaporkan diagnostik ketika ada tag build yang salah batasan pembuatan versi lama Masuk ke direktif //go:build. Misalnya, //go:build go1.23.1 merujuk pada rilis titik; sebagai gantinya gunakan //go:build go1.23. #64127.
Penganalisis copylock yang ada sekarang melaporkan diagnostik saat sebuah variabel dideklarasikan dalam loop βforβ rangkap tiga, seperti for i := iter(); selesai(i); i = next(i) { β¦ }, berisi sync.Locker, seperti sync.Mutex. Pergi 1.22 mengubah perilaku loop tersebut untuk membuat variabel baru untuk setiap iterasi, menyalin nilai dari iterasi sebelumnya; Penyalinan ini tidak aman untuk kunci. #66387.
PROGRAM GOCACHE
Biner cmd/go internal dan mekanisme pengujian caching sekarang dapat diimplementasikan oleh proses anak yang mengimplementasikan protokol JSON antara alat cmd/go dan proses anak yang diberi nama oleh variabel lingkungan GOCACHEPROG. Sebelumnya untuk GOEXPERIMENT. Detail protokol dapat dilihat di dokumentasi.
Waktu penyelesaian
Beberapa peningkatan kinerja runtime mengurangi overhead CPU rata-rata sebesar 2-3% di seluruh rangkaian benchmark representatif. Hasil dapat bervariasi, tergantung pada aplikasinya. Peningkatan ini mencakup implementasi peta bawaan baru berdasarkan Tabel Swedia, alokasi memori objek kecil yang lebih efisien, dan implementasi runtime internal baru dari mutex.
Implementasi peta bawaan baru dan mutex runtime internal baru dapat dinonaktifkan dengan menetapkan GOEXPERIMENT=noswissmap dan GOEXPERIMENT=nospinbitmutex masing-masing pada waktu pembuatan.
Penyusun
Kompiler sudah melarang pendefinisian metode baru dengan tipe penerima yang dihasilkan oleh cgo, tetapi dimungkinkan untuk mengakali pembatasan ini melalui alias tipe. Go 1.24 sekarang selalu melaporkan kesalahan jika penerima menunjukkan tipe yang dihasilkan cgo, baik secara langsung maupun tidak langsung (melalui alias tipe).
Penghubung
Linker sekarang menghasilkan pengenal build GNU (entri ELF NT_GNU_BUILD_ID) pada platform ELF dan UUID (perintah muat Mach-O LC_UUID) pada macOS secara default. ID build atau UUID diturunkan dari ID build Go. Ini dapat dimatikan dengan bendera penghubung -B none, atau ditimpa dengan bendera penghubung -B 0xNNNN dengan nilai heksadesimal yang ditentukan pengguna.
Promosi
Sebagaimana dinyatakan dalam Catatan rilis Go 1.22Go 1.24 sekarang membutuhkan Go 1.22.6 atau yang lebih baru untuk diinstal. Pengembang memperkirakan bahwa Go 1.26 akan memerlukan rilis titik Go 1.24 atau yang lebih baru untuk diluncurkan.
Perpustakaan Standar
Akses sistem berkas terbatas direktori
Tipe baru os.akar Menyediakan kemampuan untuk melakukan operasi sistem berkas dalam direktori tertentu.
Fungsi os.OpenRoot membuka direktori dan kembali os.akar. Metode pada os.akar beroperasi dalam direktori tersebut dan tidak mengizinkan jalur merujuk ke lokasi di luar direktori, termasuk jalur yang mengikuti tautan simbolis di luar direktori. Metode pada os.Root mencerminkan sebagian besar operasi sistem berkas yang tersedia dalam paket os, termasuk, misalnya, os.Root.Buka, os.Root.Buat, os.Root.Mkdir ΠΈ os.akar.statistik.
Fitur benchmark baru
Benchmark sekarang dapat menggunakan metode yang lebih cepat dan lebih sedikit kesalahan pengujian.B.Loop untuk mengulangi benchmark seperti for b.Loop() { β¦ } alih-alih struktur loop khas yang melibatkan bN seperti for range bN Ini menawarkan dua keuntungan signifikan:
- Fungsi benchmark dijalankan tepat satu kali per hitungan, jadi langkah penyiapan dan pembersihan yang mahal hanya dilakukan satu kali.
- Parameter pemanggilan fungsi dan hasil tetap ada, mencegah kompiler mengoptimalkan isi perulangan secara menyeluruh.
Finalizer yang ditingkatkan
Fitur baru waktu proses.TambahPembersihan adalah mekanisme penyelesaian yang lebih fleksibel, lebih efisien, dan lebih sedikit kesalahan dibandingkan waktu proses.SetFinalizer. AddCleanup melampirkan fungsi pembersihan ke suatu objek yang akan dijalankan segera setelah objek tersebut tidak tersedia. Namun, tidak seperti SetFinalizer, beberapa pembersihan dapat dilampirkan ke satu objek, pembersihan dapat dilampirkan ke penunjuk internal, pembersihan biasanya tidak menyebabkan kebocoran saat objek membentuk siklus, dan pembersihan tidak menunda dealokasi objek atau objek-objek yang ditunjuknya. Kode baru seharusnya lebih memilih AddCleanup daripada SetFinalizer.
Paket lemah baru
Paket baru lemah memberikan petunjuk yang lemah.
Pointer lemah merupakan primitif tingkat rendah yang disediakan untuk membuat struktur yang hemat memori seperti kamus lemah untuk memetakan nilai, kamus kanonisasi untuk apa pun yang tidak tercakup oleh suatu paket. unik, dan berbagai jenis cache. Untuk mendukung kasus penggunaan ini, rilis ini juga menyediakan waktu proses.TambahPembersihan ΠΈ maphash.Sebanding.
Paket crypto/mlkem baru
Paket baru kripto/mlkem mengimplementasikan ML-KEM-768 dan ML-KEM-1024.
ML-KEM adalah mekanisme pertukaran kunci pasca-kuantum, yang sebelumnya dikenal sebagai Kyber dan ditentukan dalam FIP 203.
Paket baru crypto/hkdf, crypto/pbkdf2 dan crypto/sha3
Paket baru kripto/hkdf mengimplementasikan fungsi derivasi kunci βEkstrak-dan-Perluasβ berbasis HMAC HKDF sebagaimana didefinisikan dalam RFC 5869.
Paket baru kripto/pbkdf2 mengimplementasikan fungsi derivasi kunci berbasis kata sandi PBKDF2 seperti yang didefinisikan dalam RFC 8018.
Paket baru kripto/sha3 mengimplementasikan fungsi hash SHA-3 dan fungsi keluaran SHAKE dan cSHAKE yang dapat diperluas seperti yang didefinisikan dalam FIP 202.
Ketiga paket tersebut didasarkan pada paket golang.org/x/crypto/β¦ yang ada.
Kepatuhan FIPS 140-3
Rilis ini mencakup seperangkat mekanisme baru untuk memastikan kepatuhan FIPS 140-3.
Modul Go crypto adalah serangkaian paket pustaka standar internal yang digunakan secara transparan untuk mengimplementasikan algoritma yang disetujui FIPS 140-3. Aplikasi tidak memerlukan perubahan untuk menggunakan modul Go crypto untuk algoritma yang disetujui.
Variabel lingkungan baru GOFIPS140 dapat digunakan untuk memilih versi modul kripto Go yang akan digunakan dalam pembuatan. Baru Pengaturan GODEBUG fips140 dapat digunakan untuk mengaktifkan mode FIPS 140-3 saat runtime.
Go 1.24 menyertakan modul kripto Go v1.0.0, yang saat ini sedang diuji dengan lab terakreditasi CMVP.
Pengujian paket eksperimental baru/synctest
Paket eksperimental baru pengujian/sinkronisasi Menyediakan dukungan untuk menguji kode bersamaan.
- Fungsi uji sinkronisasi.jalankan menjalankan sekelompok goroutine dalam "gelembung" yang terisolasi. Dalam gelembung fungsi paket waktu beroperasi pada jam palsu.
- Fungsi uji sinkronisasi.tunggu tunggu sampai semua goroutine diblokir dalam gelembung saat ini.
Rinciannya dapat ditemukan dalam dokumentasi paket.
Paket synctest bersifat eksperimental dan harus diaktifkan dengan menetapkan GOEXPERIMENT=synctest. API paket dapat berubah pada rilis mendatang. DI DALAM #67434 Anda dapat melihat detail lebih lanjut dan memberikan masukan.
Perubahan kecil di perpustakaan
arsip
Implementasi (*Writer.AddFS) dalam archive/zip dan archive/tar sekarang menulis header direktori untuk direktori kosong.
byte
Paket byte menambahkan beberapa fungsi yang bekerja dengan iterator:
- Garis Mengembalikan iterator atas string yang dipisahkan baris baru dalam irisan byte.
- Pemisahan Seq mengembalikan sebuah iterator atas semua sub-irisan dari irisan byte yang dipisahkan oleh pemisah.
- PisahkanSetelahSeq mengembalikan sebuah iterator atas sub-irisan dari irisan byte, dibagi setelah setiap kemunculan pemisah.
- BidangSeq mengembalikan iterator atas sub-irisan dari irisan byte di sekitar urutan karakter spasi, seperti yang didefinisikan unicode.IsSpace
- Fungsi BidangSeq mengembalikan sebuah iterator atas sub-irisan dari irisan byte di sekitar rangkaian titik kode Unicode yang memenuhi predikat.
kripto/aes
Nilai kembali Chiper Baru tidak lagi mengimplementasikan metode NewCTR, NewGCM, NewCBCEncrypter, dan NewCBCDecrypter. Metode ini tidak terdokumentasi dan tidak tersedia pada semua arsitektur. Sekarang artinya Memblokir harus diteruskan langsung ke fungsi yang sesuai kripto/sandi. Saat ini, kripto/sandi masih memeriksa metode ini pada nilai Blok, meskipun metode ini tidak lagi didukung oleh pustaka standar.
kripto/sandi
Fitur baru GCM BaruDenganNonceAcak kembali AEAD, yang mengimplementasikan AES-GCM dengan menghasilkan nonce acak selama Seal dan menambahkannya ke ciphertext.
Implementasi Aliran, kembali CTR Baru ketika digunakan dengan kripto/aes sekarang beberapa kali lebih cepat pada amd64 dan arm64.
BaruOFB, Enkripsi CFB Baru ΠΈ Dekripsi CFB Baru sekarang dinyatakan usang. Mode OFB dan CFB tidak diautentikasi, yang umumnya memungkinkan serangan aktif untuk memanipulasi dan memulihkan teks biasa. Aplikasi yang disarankan untuk digunakan AEAD sebagai balasannya. Jika mode tidak diautentikasi Aliran diperlukan, bisa digunakan CTR Baru sebagai imbalannya.
kripto/ecdsa
PrivateKey.Tanda Tangan sekarang membuat tanda tangan deterministik menurut RFC 6979, jika sumber keacakan adalah nol.
kripto/md5
Nilai kembali md5.baru, sekarang juga mengimplementasikan antarmuka pengkodean.binaryappender.
mata uang kripto/rand
Fungsi Baca sekarang menjamin tidak ada kegagalan. Jika Read mengalami kesalahan saat membaca Pembaca, program akan berakhir secara permanen. Perhatikan bahwa Reader default didokumentasikan selalu berfungsi dengan sukses, jadi perubahan ini seharusnya hanya memengaruhi program yang mengganti variabel Reader. Satu pengecualian adalah kernel Linux sebelum 3.17, di mana Reader default masih membuka /dev/urandom dan mungkin gagal.
Pada Linux 6.11 dan yang lebih baru, Reader sekarang menggunakan panggilan sistem getrandom melalui vDSO. Ini beberapa kali lebih cepat, biasanya untuk pembacaan kecil.
Pada OpenBSD Reader sekarang menggunakan arc4random_buf(3).
Fitur baru Teks sekarang dapat menghasilkan rangkaian teks acak yang aman secara kriptografi.
kripto/rsa
HasilkanKunci sekarang mengembalikan kesalahan jika panjang kunci kurang dari 1024 bit diminta. Semua metode Tanda, Verifikasi, Enkripsi, dan Dekripsi sekarang mengembalikan kesalahan jika digunakan dengan ukuran kunci kurang dari 1024 bit. Kunci seperti itu tidak aman dan tidak boleh digunakan. Menyiapkan GODEBUG rsa1024min=0 mengembalikan perilaku lama, tetapi pengembang Go menyarankan untuk melakukan ini hanya jika diperlukan dan hanya dalam pengujian, misalnya dengan menambahkan baris //go:debug rsa1024min=0 ke berkas pengujian. Baru contoh GenerateKey menyediakan kunci uji standar 2024-bit yang mudah digunakan.
Sekarang lebih aman dan efisien untuk menelepon KunciPribadi.Pra-komputasi untuk KunciPribadi.Validasi. Precompute sekarang lebih cepat jika ada bagian yang terisi sebagian Nilai yang Dihitung Sebelumnya, misalnya saat mengekstrak kunci dari JSON.
Paket sekarang menolak lebih banyak kunci yang tidak valid bahkan ketika Validasi tidak dipanggil, dan HasilkanKunci sekarang dapat mengembalikan kesalahan baru untuk sumber keacakan yang rusak. Lapangan Bilangan prima ΠΈ Telah dihitung sebelumnya struktur PrivateKey sekarang digunakan dan divalidasi bahkan ketika beberapa nilai hilang. Ada juga perubahan pada crypto/x509 untuk penguraian dan ekstraksi kunci RSA, yang dijelaskan di bawah.
TandaPKCS1v15 ΠΈ VerifikasiPKCS1v15 sekarang mendukung SHA-512/224, SHA-512/256 dan SHA-3.
HasilkanKunci sekarang menggunakan metode yang sedikit berbeda untuk menghasilkan eksponen privat (fungsi Carmichael, bukan fungsi Euler). Aplikasi langka yang secara eksternal membuat ulang kunci hanya dari bilangan prima dapat menghasilkan hasil yang berbeda tetapi kompatibel.
Operasi pada kunci publik dan privat kini hingga dua kali lebih cepat di wasm.
kripto/sha*
- kripto/sha1: nilai kembali sha1.Baru sekarang juga mengimplementasikan antarmuka pengkodean.binaryappender.
- kripto/sha256: nilai yang dikembalikan sha256.Baru ΠΈ sha256.Baru224 sekarang juga menerapkan antarmuka pengkodean.binaryappender.
- kripto/sha512: nilai yang dikembalikan sha512.Baru, sha512.Baru384, sha512.Baru512_224 ΠΈ sha512.Baru512_256, sekarang juga menerapkan antarmuka pengkodean.binaryappender.
kripto/halus
Fitur baru DenganDataIndependentTiming memungkinkan pengguna untuk mengeksekusi fungsi dengan fitur spesifik arsitektur yang diaktifkan guna memastikan bahwa instruksi tertentu tidak berubah relatif terhadap waktu nilai data. Ini dapat digunakan untuk memastikan bahwa kode yang ditulis untuk berjalan dalam waktu konstan belum dioptimalkan oleh fungsi tingkat prosesor sehingga berjalan dalam waktu variabel. Saat ini WithDataIndependentTiming menggunakan bit PSTATE.DIT pada arm64 dan tidak melakukan apa pun pada semua arsitektur lainnya. Menyiapkan GODEBUG dataindependenttiming=1 mengaktifkan mode DIT untuk seluruh program Go.
Keluaran XOR Byte harus tumpang tindih sepenuhnya atau tidak sama sekali dengan input. Sebelumnya perilaku tersebut tidak terdefinisi sebaliknya, sedangkan sekarang XORBytes akan panik.
kripto/tls
Server TLS sekarang mendukung Encrypted Client Hello (ECH). Fitur ini dapat diaktifkan dengan mengisi kolom. Konfigurasi.EncryptedClientHelloKeys.
Mekanisme Pertukaran Kunci Pasca-Kuantum Baru X25519MLKEM768 sekarang didukung dan diaktifkan secara default saat Konfigurasi.CurvePreferences adalah nihil. Menyiapkan GODEBUG tlsmlkem=0 mengembalikan default.
Dukungan untuk pertukaran kunci X25519Kyber768Draft00 eksperimental telah dihapus.
Perintah pertukaran kunci sekarang ditangani sepenuhnya oleh paket crypto/tls. Memesan Konfigurasi.CurvePreferences sekarang diabaikan dan kontennya hanya digunakan untuk menentukan pertukaran kunci mana yang akan disertakan saat kolom diisi.
Lapangan baru Ekstensi ClientHelloInfo Mencantumkan daftar pengenal ekstensi yang diterima dalam pesan Klien Halo. Ini dapat berguna untuk sidik jari klien TLS.
kripto/x509
Menyiapkan GODEBUG x509sha1 telah dihapus. Sertifikasi.Verifikasi tidak lagi mendukung tanda tangan berbasis SHA-1.
OID sekarang mengimplementasikan antarmuka pengkodean.binaryappender ΠΈ pengkodean.TextAppender.
Bidang kebijakan sertifikat default telah diubah dari Sertifikat.PengidentifikasiKebijakan pada Sertifikat.Kebijakan. Saat mengurai sertifikat, kedua bidang akan diisi, tetapi saat membuat kebijakan sertifikat, bidang tersebut akan diambil dari bidang Certificate.Policies dan bukan Certificate.PolicyIdentifiers. Perubahan ini dapat dikembalikan. Pengaturan GODEBUG x509usepolicies=0.
BuatSertifikat sekarang akan menghasilkan nomor seri menggunakan metode yang sesuai RFC 5280 saat meneruskan bidang templat Sertifikat.Nomor Seri nihil, bukannya mogok.
Sertifikat.Verifikasi sekarang mendukung validasi kebijakan seperti yang didefinisikan dalam RFC 5280 dan RFC 9618. Bidang baru VerifikasiOpsi.KebijakanSertifikat dapat diatur ke serangkaian kebijakan yang dapat diterima OID. Hanya rantai sertifikat dengan grafik kebijakan yang valid yang akan dikembalikan dari Sertifikat.Verifikasi.
MarshalPKCS8KunciPribadi sekarang mengembalikan kesalahan alih-alih mengambil kunci RSA yang tidak valid. (MarshalPKCS1KunciPribadi tidak memiliki pengembalian kesalahan dan perilakunya saat kunci tidak valid diberikan tetap tidak terdefinisi.)
ParsePKCS1KunciPribadi ΠΈ ParsePKCS8KunciPribadi sekarang menggunakan dan memvalidasi nilai CRT yang dikodekan, sehingga dapat menolak kunci RSA tidak valid yang sebelumnya diterima. Penggunaan Pengaturan GODEBUG x509rsacrt=0 kembali ke perhitungan ulang nilai CRT.
debug/peri
Paket debug/peri Menambahkan dukungan untuk menangani versi simbol dalam file ELF (Executable and Linkable Format) dinamis. Metode baru File.VersiDinamis Mengembalikan daftar versi dinamis yang ditentukan dalam berkas ELF. Metode baru File.DynamicVersionNeeds Mengembalikan daftar versi dinamis yang diperlukan oleh berkas ELF ini yang didefinisikan dalam objek ELF lainnya. Akhirnya, bidang baru Simbol.HasVersion ΠΈ Simbol.VersiIndeks menunjukkan versi simbol.
encoding
Dua antarmuka baru Penambah Teks ΠΈ Penambah Biner diperkenalkan untuk menambahkan teks atau representasi biner suatu objek ke irisan byte. Antarmuka ini menyediakan fungsionalitas yang sama seperti Pengirim Teks ΠΈ BinaryMarshaler, tetapi alih-alih mengalokasikan potongan baru setiap waktu, mereka menambahkan data langsung ke potongan yang sudah ada. Antarmuka ini saat ini diimplementasikan oleh tipe pustaka standar yang sudah mengimplementasikan TextMarshaler dan/atau BinaryMarshaler.
pengkodean/json
Saat membangun, bidang struktur dengan opsi omitzero baru di tag bidang struktur akan dihilangkan jika nilainya nol. Jika tipe bidang memiliki metode bool IsZero(), metode tersebut akan digunakan untuk menentukan apakah nilainya nol. Jika tidak, nilainya akan menjadi nol jika nilai null untuk tipenya. Tag bidang omitzero lebih bersih dan lebih sedikit kesalahan daripada omitempty ketika tujuannya adalah menghilangkan nilai null. Secara khusus, tidak seperti omitempty, omitzero menghilangkan angka nol waktu.waktu nilai-nilai, yang merupakan sumber masalah umum.
Jika omitempty dan omitzero keduanya ditentukan, bidang akan dihilangkan jika nilainya kosong atau nol (atau keduanya).
Kesalahan Tipe Unmarshal.Lapangan sekarang menyertakan struktur bawaan untuk memberikan pesan kesalahan yang lebih terperinci.
pergi/jenis
Semua struktur data go/types yang mengekspos urutan pasangan metode, seperti Len() int dan At(int) T, kini juga memiliki metode yang mengembalikan iterator, yang memungkinkan kode lebih sederhana seperti ini:
params := fn.Jenis.(*jenis.Tanda Tangan).Params() untuk i := 0; saya < params.Len(); i++ { gunakan(params.At(i)) }
Pada yang ini:
untuk param := rentang fn.Signature().Params().Variabel() { gunakan(param) }
Metode: Antarmuka.EmbeddedTypes Antarmuka.ExplicitMethods Antarmuka.Metode MetodeSet.Metode Metode Bernama Cakupan.Anak-anak Struktur.Bidang Tuple.Variabel TypeList.Jenis DaftarParameterTipe.ParameterTipe Serikat.Persyaratan
tanda pagar/*
- hash/adler32: nilai kembali New, sekarang juga mengimplementasikan antarmuka pengkodean.binaryappender
- hash/crc32: nilai yang dikembalikan New ΠΈ IEEE baru, sekarang juga menerapkan antarmuka pengkodean.binaryappender
- hash/crc64: nilai kembali New, sekarang juga mengimplementasikan antarmuka pengkodean.binaryappender
- hash/fnv: nilai yang dikembalikan New32 Baru32a New64 Baru64a New128 ΠΈ Baru128a, sekarang juga menerapkan antarmuka pengkodean.binaryappender
- hash/petafase: fitur baru Sebanding ΠΈ TulisSebanding dapat menghitung hash dari nilai apa pun yang dapat dibandingkan. Hal ini memungkinkan Anda untuk melakukan hash apa pun yang dapat digunakan sebagai kunci kamus Go.
catatan/jejak
Baru Penanganan Pembuangan adalah pengendali yang tidak pernah diaktifkan dan selalu membuang outputnya.
Tingkat ΠΈ TingkatVar sekarang implementasikan antarmuka pengkodean.TextAppender.
matematika/*
- matematika/besar: Mengapung, Int ΠΈ Tikus sekarang implementasikan antarmuka pengkodean.TextAppender.
- matematika/random: panggilan fungsi tingkat atas yang tidak digunakan lagi Benih tidak lagi memiliki efek apa pun. Untuk mengembalikan perilaku lama, Anda dapat menggunakan Pengaturan GODEBUG randseednop=0. Lebih banyak konteks di penawaran 67273.
- matematika/rand/v2: ChaCha8 ΠΈ PCG sekarang implementasikan antarmuka pengkodean.binaryappender.
bersih
DengarkanCondig sekarang menggunakan MPTCP secara default pada sistem yang mendukungnya (saat ini hanya Linux).
IP sekarang mengimplementasikan antarmuka pengkodean.TextAppender.
bersih/http
Pembatasan telah berubah angkutan terhadap tanggapan informasi 1xx yang diterima sebagai tanggapan terhadap permintaan. Sebelumnya ini akan menghentikan permintaan dan mengembalikan kesalahan setelah menerima lebih dari 5 respons 1xx. Ini sekarang hanya mengembalikan kesalahan jika ukuran total semua respons 1xx melebihi pengaturan konfigurasi Transportasi.MaxResponseHeaderBytes.
Juga, ketika permintaan memiliki kait pelacakan jaringan/http/httptrace.ClientTrace.Got1xxResponse, sekarang tidak ada batasan jumlah total jawaban 1xx. Hook Got1xxResponse dapat mengembalikan kesalahan untuk menghentikan permintaan.
angkutan ΠΈ Server sekarang memiliki bidang HTTP2 yang memungkinkan konfigurasi pengaturan protokol HTTP/2.
Bidang baru Server.Protokol ΠΈ Transportasi.Protokol menyediakan cara sederhana untuk mengonfigurasi protokol HTTP mana yang digunakan server atau klien.
Server dan klien dapat dikonfigurasi untuk mendukung koneksi HTTP/2 yang tidak terenkripsi.
Ketika Server.Protokol berisi UnencrypterHTTP2, server akan menerima koneksi HTTP/2 pada port yang tidak terenkripsi. Server dapat menerima HTTP/1 dan HTTP/2 yang tidak terenkripsi pada port yang sama.
Ketika Transportasi.Protokol berisi UnencryptedHTTP2 dan tidak berisi HTTP1, transportasi akan menggunakan HTTP/2 yang tidak terenkripsi untuk alamat http://. Jika transportasi dikonfigurasi untuk menggunakan HTTP/1 dan HTTP/2 yang tidak terenkripsi, ia akan menggunakan HTTP/1.
Dukungan untuk HTTP/2 yang tidak terenkripsi menggunakan "HTTP/2 dengan Forward-Learning" (RFC 9113, bagian 3.3). Header yang tidak digunakan lagi βUpgrade: h2cβ tidak didukung.
jaring/jala
Addr, AlamatPort ΠΈ Awalan sekarang menerapkan antarmuka pengkodean.binaryappender ΠΈ pengkodean.TextAppender.
jaringan/url
URL sekarang juga mengimplementasikan antarmuka pengkodean.binaryappender.
os/pengguna
Di Windows terbaru sekarang dapat digunakan di Windows Nano Server. Implementasi telah diperbarui untuk menghindari penggunaan fungsi dari pustaka NetApi32, yang hilang dari Nano Server.
Di Windows terbaru, Lookup ΠΈ PencarianId sekarang mendukung akun layanan pengguna bawaan berikut:
- SISTEM OTORITAS NT
- OTORITAS NTLAYANAN LOKAL
- LAYANAN NT AUTHORITYNETWORK
Di Windows terbaru dipercepat secara signifikan ketika pengguna saat ini bergabung ke domain yang lambat, yang merupakan kasus umum bagi banyak pengguna korporat. Kinerja implementasi baru sekarang dalam hitungan milidetik, dibandingkan dengan implementasi sebelumnya, yang dapat memakan waktu beberapa detik, bahkan menit, untuk menyelesaikannya.
Di Windows terbaru sekarang mengembalikan pengguna pemilik proses ketika utas saat ini menyamar sebagai pengguna lain. Sebelumnya ini menghasilkan kesalahan.
regexp
Regexp sekarang mengimplementasikan antarmuka pengkodean.TextAdapter.
runtime
Fungsi GOROOT sekarang sudah tidak digunakan lagi. Di lingkungan yang lebih baru, Anda sebaiknya menggunakan jalur sistem untuk menentukan biner "go", dan menggunakan go env GOROOT untuk menentukan GOROOT.
string
Paket string menambahkan beberapa fungsi untuk bekerja dengan iterator:
- Garis Mengembalikan iterator atas baris yang dipisahkan baris baru dalam sebuah string.
- Pemisahan Seq mengembalikan sebuah iterator atas semua substring dari sebuah string yang dipisahkan oleh pemisah.
- PisahkanSetelahSeq mengembalikan sebuah iterator atas sub-string dari sebuah string, dibagi setelah setiap kemunculan pemisah.
- BidangSeq mengembalikan iterator atas sub-string dari sebuah string di sekitar urutan karakter spasi, seperti yang didefinisikanunicode.IsSpace
- Fungsi BidangSeq Mengembalikan iterator atas sub-string dari string di sekitar rangkaian titik kode Unicode yang memenuhi suatu predikat.
sinkronisasi
Implementasi sinkronisasi.peta telah diubah untuk meningkatkan kinerja, khususnya untuk perubahan kamus. Misalnya, pertentangan perubahan himpunan yang terpisah lebih kecil kemungkinannya terjadi pada kamus berukuran besar, dan tidak lagi memerlukan waktu pembuatan untuk mencapai muatan kamus dengan pertentangan rendah.
Jika Anda mengalami masalah, atur GOEXPERIMENT=nosynchashtriemap selama pembuatan untuk kembali ke implementasi lama dan silakan isi formulir masalah.
pengujian
Metode baru T.Konteks ΠΈ B. Konteks mengembalikan konteks yang dibuang setelah pengujian selesai dan sebelum fungsi pembersihan pengujian dijalankan.
Metode baru T. Chdir ΠΈ B. Chdir dapat digunakan untuk mengubah direktori kerja selama berlangsungnya pengujian atau benchmark.
teks/templat
Templat sekarang mendukung range-over-func dan range-over-int.
waktu
Waktu sekarang mengimplementasikan antarmuka pengkodean.binaryappender ΠΈ pengkodean.TextAppender.
port
Linux
Seperti itu diumumkan Menurut catatan rilis Go 1.23, Go 1.24 memerlukan kernel Linux versi 3.2 atau yang lebih baru.
darwin
Go 1.24 adalah rilis terakhir yang akan berjalan pada macOS 11 Big Sur. Go 1.25 akan memerlukan macOS 12 Monterey atau lebih baru.
WebAssembly
Direktif kompiler go:wasmexport telah ditambahkan ke program Go untuk mengekspor fungsi ke host WebAssembly.
Dalam WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 mendukung pembuatan program Go sebagai reaktor/perpustakaan dengan menentukan tanda build -buildmode=c-shared.
Lebih banyak tipe sekarang diizinkan sebagai tipe argumen atau hasil untuk fungsi go:wasmimport. Secara khusus, bool, string, uintptr dan pointer ke tipe tertentu diperbolehkan (lihat detail di dokumentasi), bersama dengan tipe integer dan floating-point 32-bit dan 64-bit, dan unsafe.Pointer, yang sudah diizinkan. Tipe ini juga diizinkan sebagai tipe argumen atau hasil untuk fungsi go:wasmexport.
File dukungan untuk WebAssembly telah dipindahkan ke lib/wasm dari misc/wasm.
Jejak memori awal berkurang secara signifikan, terutama untuk aplikasi WebAssembly kecil.
Windows
Port windows/arm 32-bit (GOOS=windows GOARCH=arm) telah ditandai sebagai rusak. Detail dalam #70705
Sumber: linux.org.ru
