Apa yang Baru di Go 1.24?
Go 1.24 diperkirakan akan menjadi rilis yang signifikan, memperkenalkan serangkaian peningkatan yang berfokus pada kinerja, keamanan, dan pengalaman pengembang. Perubahan-perubahan ini bertujuan untuk menjadikan Go lebih kuat dan efisien dalam membangun aplikasi modern.
Peningkatan Kinerja
Peningkatan kinerja umum dengan pengurangan beban CPU sebesar 2-3% di seluruh rangkaian benchmark representatif. Peningkatan ini mencakup implementasi map bawaan yang baru, alokasi memori yang lebih efisien untuk objek kecil, dan implementasi mutex internal runtime yang baru. Hasil dapat bervariasi tergantung pada aplikasi.
Kripto Pasca-Kuantum
Pengenalan paket crypto/mlkem
, yang mengimplementasikan ML-KEM-768 dan ML-KEM-1024. ML-KEM adalah mekanisme pertukaran kunci pasca-kuantum yang sebelumnya dikenal sebagai Kyber dan ditentukan dalam FIPS 203. Penambahan ini mempersiapkan Go untuk masa depan keamanan kriptografi.
Peningkatan TLS
Dukungan untuk Encrypted Client Hello (ECH) di TLS. Fitur ini dapat diaktifkan dengan mengisi bidang Config.EncryptedClientHelloKeys
, meningkatkan privasi dan keamanan untuk koneksi TLS.
Map Swiss Table Baru
Implementasi map yang ditingkatkan untuk kinerja yang lebih baik. Implementasi baru ini didasarkan pada Swiss Tables, dan dapat dinonaktifkan dengan tanda build GOEXPERIMENT=noswissmap
.
Pembaruan Sync Map
Peningkatan kinerja untuk modifikasi map di sync.Map
. Modifikasi set kunci yang terpisah jauh lebih kecil kemungkinannya untuk bersaing pada map yang lebih besar, dan tidak ada lagi waktu ramp-up yang diperlukan untuk mencapai beban rendah-kontensi dari map. Jika Anda menemukan masalah, Anda dapat kembali ke implementasi lama menggunakan GOEXPERIMENT=nosynchashtriemap
.
Marshaling JSON yang Ditingkatkan
Opsi tag omitempty
baru untuk penghilangan bidang struct yang lebih cerdas selama marshaling JSON. Saat melakukan marshaling, bidang struct dengan opsi omitempty
akan dihilangkan jika nilainya adalah nol. Jika tipe bidang memiliki metode IsZero() bool
, itu akan digunakan untuk menentukan apakah nilainya nol.
Pembersihan Runtime
Pengenalan fungsi AddCleanup
untuk menggantikan SetFinalizer
guna pengelolaan sumber daya yang lebih baik. Tidak seperti SetFinalizer
, fungsi ini tidak menghidupkan kembali objek yang terhubung dengannya untuk finalisasi, dan beberapa pembersihan dapat dilampirkan pada satu objek. Kode baru sebaiknya menggunakan AddCleanup
daripada SetFinalizer
.
Direktif Alat di go.mod
Pelacakan dependensi eksekusi yang ditingkatkan menggunakan direktif alat di go.mod
. Ini menghilangkan kebutuhan akan solusi sebelumnya untuk menambahkan alat sebagai impor kosong ke file yang secara konvensional diberi nama "tools.go".
Akses Terbatas Direktori
Tipe os.Root
baru untuk operasi sistem berkas yang terkontrol. Tipe os.Root
menyediakan kemampuan untuk melakukan operasi sistem berkas dalam direktori tertentu, mencegah akses di luar jalur yang ditentukan.
Peningkatan Pengujian
Paket testing/synctest
baru untuk menguji kode konkuren. Fungsi synctest.Run
memulai sekelompok goroutine dalam "gelembung" yang terisolasi, dan fungsi synctest.Wait
menunggu semua goroutine dalam gelembung saat ini untuk diblokir. Paket ini bersifat eksperimental dan harus diaktifkan dengan mengatur GOEXPERIMENT=synctest
pada waktu build.
Cache Build
Eksekusi go run
sekarang di-cache untuk eksekusi yang lebih cepat. Ini membuat eksekusi berulang lebih cepat dengan mengorbankan ukuran cache yang lebih besar.
Kinerja Cgo
Anotasi #cgo noescape
dan #cgo nocallback
baru untuk kinerja Cgo yang lebih baik. #cgo noescape cFunctionName
memberitahu kompiler bahwa memori yang diteruskan ke fungsi C tidak keluar. #cgo nocallback cFunctionName
memberitahu kompiler bahwa fungsi C tidak memanggil kembali fungsi Go apa pun.
Pointer Lemah
Dukungan untuk pointer lemah untuk mereferensikan memori dengan aman tanpa mencegah reklamasi. Pointer lemah adalah primitif tingkat rendah yang disediakan untuk memungkinkan pembuatan struktur yang efisien memori, seperti map lemah untuk mengasosiasikan nilai, map kanonisasi, dan berbagai jenis cache.
Peningkatan Benchmark
Metode testing.B.Loop
baru untuk benchmark yang lebih cepat dan tidak mudah salah. Fungsi benchmark akan dieksekusi tepat satu kali per -count
, sehingga langkah-langkah pengaturan dan pembersihan yang mahal hanya dieksekusi sekali. Parameter panggilan fungsi dan hasilnya tetap hidup, mencegah kompiler mengoptimalkan sepenuhnya isi loop.
Go 1.24 diperkirakan akan menjadi rilis yang signifikan, menawarkan peningkatan substansial dalam berbagai aspek bahasa dan ekosistemnya.