Ikhtisar Rilis Go 1.24: Swiss Table Maps, ML-KEM, os.Root, dan testing/synctest

Go 1.24 sedang dibentuk menjadi rilis yang signifikan, dengan memperkenalkan serangkaian peningkatan yang berfokus pada performa, keamanan, dan pengalaman pengembang. Perubahan-perubahan ini bertujuan untuk membuat Go menjadi lebih andal dan efisien dalam membangun aplikasi modern.
Peningkatan Performa
Peningkatan performa umum dengan pengurangan overhead CPU sebesar 2-3% pada sekumpulan benchmark yang representatif. Peningkatan ini mencakup implementasi map bawaan yang baru, alokasi memori untuk objek kecil yang lebih efisien, dan implementasi mutex internal runtime yang baru. Hasil dapat bervariasi tergantung pada aplikasi.
Kriptografi 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 ditetapkan dalam FIPS 203. Penambahan ini mempersiapkan Go untuk masa depan keamanan kriptografi.
Peningkatan TLS
Dukungan untuk Encrypted Client Hello (ECH) dalam TLS. Fitur ini dapat diaktifkan dengan mengisi field Config.EncryptedClientHelloKeys, sehingga meningkatkan privasi dan keamanan untuk koneksi TLS.
Map Swiss Table Baru
Implementasi map yang ditingkatkan untuk performa yang lebih baik. Implementasi baru ini didasarkan pada Swiss Tables, dan dapat dinonaktifkan dengan flag build GOEXPERIMENT=noswissmap.
Pembaruan Sync Map
Peningkatan performa untuk modifikasi map pada sync.Map. Modifikasi pada himpunan kunci yang terpisah jauh lebih kecil kemungkinannya untuk saling bersaing pada map yang lebih besar, dan tidak ada lagi waktu pemanasan yang diperlukan untuk mencapai beban dengan persaingan rendah dari map. Jika Anda menemui masalah, Anda dapat kembali ke implementasi lama menggunakan GOEXPERIMENT=nosynchashtriemap.
Marshaling JSON yang Ditingkatkan
Opsi tag omitempty baru untuk penghilangan field struct yang lebih cerdas saat marshaling JSON. Saat marshaling, field struct dengan opsi omitempty akan dihilangkan jika nilainya nol. Jika tipe field memiliki metode IsZero() bool, metode tersebut akan digunakan untuk menentukan apakah nilainya nol.
Pembersihan Runtime
Pengenalan fungsi AddCleanup untuk menggantikan SetFinalizer demi pengelolaan sumber daya yang lebih baik. Berbeda dengan SetFinalizer, fungsi ini tidak menghidupkan kembali objek yang dilampirkan untuk finalisasi, dan beberapa cleanup dapat dilampirkan pada satu objek. Kode baru sebaiknya menggunakan AddCleanup daripada SetFinalizer.
Tool Directives di go.mod
Pelacakan dependensi executable yang ditingkatkan menggunakan tool directives di go.mod. Hal ini menghilangkan kebutuhan akan solusi sebelumnya, yaitu menambahkan tool sebagai blank import pada sebuah file yang secara konvensional dinamai “tools.go”.
Akses Terbatas pada Direktori
Tipe os.Root baru untuk operasi sistem berkas yang terkontrol. Tipe os.Root menyediakan kemampuan untuk melakukan operasi sistem berkas dalam direktori tertentu, sehingga mencegah akses di luar jalur yang ditentukan.
Peningkatan Pengujian
Paket testing/synctest baru untuk menguji kode konkuren. Fungsi synctest.Run memulai sekelompok goroutine dalam "bubble" yang terisolasi, dan fungsi synctest.Wait menunggu hingga semua goroutine dalam bubble saat ini berhenti (block). Paket ini bersifat eksperimental dan harus diaktifkan dengan mengatur GOEXPERIMENT=synctest pada waktu build.
Build Cache
Executable go run kini di-cache untuk eksekusi yang lebih cepat. Hal ini membuat eksekusi berulang menjadi lebih cepat dengan konsekuensi ukuran cache yang lebih besar.
Performa Cgo
Anotasi #cgo noescape dan #cgo nocallback baru untuk performa Cgo yang lebih baik. #cgo noescape cFunctionName memberi tahu compiler bahwa memori yang diteruskan ke fungsi C tidak akan lolos (escape). #cgo nocallback cFunctionName memberi tahu compiler bahwa fungsi C tidak memanggil balik fungsi Go mana pun.
Weak Pointer
Dukungan untuk weak pointer untuk merujuk memori secara aman tanpa mencegah pembebasannya (reclamation). Weak pointer adalah primitif tingkat rendah yang disediakan untuk memungkinkan pembuatan struktur yang hemat memori, seperti weak map untuk mengaitkan nilai, map kanonikalisasi, dan berbagai jenis cache.
Peningkatan Benchmark
Metode testing.B.Loop baru untuk benchmark yang lebih cepat dan lebih sedikit menimbulkan kesalahan. Fungsi benchmark akan dieksekusi tepat satu kali per -count, sehingga langkah setup dan cleanup yang mahal hanya dijalankan sekali. Parameter dan hasil pemanggilan fungsi tetap dipertahankan (kept alive), sehingga mencegah compiler mengoptimalkan badan loop sepenuhnya.
Go 1.24 sedang dibentuk menjadi rilis yang signifikan, menawarkan peningkatan substansial dalam berbagai aspek bahasa dan ekosistemnya.
