GoSuda

Apa yang Baru di Go 1.24?

By Lemon Mint
views ...

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.

Overview of Go 1.24