Peningkatan Penting di Go 1.24
(gosuda.org)Versi Go 1.24 tampaknya akan menjadi rilis penting dengan menghadirkan berbagai peningkatan yang berfokus pada performa, keamanan, dan pengalaman pengembang. Perubahan-perubahan ini bertujuan membuat Go semakin kuat dan efisien untuk membangun aplikasi modern.
Peningkatan performa
Ada peningkatan performa umum yang mengurangi overhead CPU sebesar 2~3% pada suite 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. Hasilnya dapat berbeda tergantung pada aplikasinya.
Kriptografi tahan kuantum
Paket crypto/mlkem yang mengimplementasikan ML-KEM-768 dan ML-KEM-1024 telah diperkenalkan. ML-KEM sebelumnya dikenal sebagai Kyber dan merupakan mekanisme pertukaran kunci tahan kuantum yang ditetapkan dalam FIPS 203. Penambahan ini membantu menyiapkan Go untuk keamanan kriptografi di masa depan.
Encrypted Client Hello
Mendukung ECH (Encrypted Client Hello) di TLS. Fitur ini dapat diaktifkan dengan mengisi field Config.EncryptedClientHelloKeys, dan meningkatkan privasi serta keamanan koneksi TLS.
Swiss Table Map baru
Ini adalah implementasi map yang ditingkatkan untuk performa yang lebih baik. Implementasi baru ini berbasis Swiss Tables, dan dapat dinonaktifkan menggunakan build flag GOEXPERIMENT=noswissmap.
Pembaruan Sync Map
Performa modifikasi map di sync.Map telah ditingkatkan. Modifikasi pada set kunci yang terpisah jauh lebih kecil kemungkinannya mengalami contention pada map yang lebih besar, dan tidak lagi memerlukan waktu persiapan untuk mencapai beban contention rendah pada map. Jika muncul masalah, Anda dapat kembali ke implementasi lama dengan GOEXPERIMENT=nosynchashtriemap.
JSON marshaling yang ditingkatkan
Opsi tag omitempty baru untuk penghilangan field struct yang lebih cerdas saat JSON marshaling. Saat melakukan marshaling, jika nilai field struct dengan opsi omitempty adalah 0, field tersebut akan dihilangkan. Jika tipe field memiliki metode IsZero() bool, metode itu akan digunakan untuk memeriksa apakah nilainya 0.
Pembersihan runtime
Fungsi AddCleanup diperkenalkan sebagai pengganti SetFinalizer untuk pengelolaan resource yang lebih baik. Tidak seperti SetFinalizer, fungsi ini tidak menghidupkan kembali objek yang terkait untuk finalization, dan beberapa cleanup dapat dihubungkan ke satu objek. Kode baru sebaiknya lebih memilih AddCleanup daripada SetFinalizer.
Direktif tool di go.mod
Pelacakan dependensi tool ditingkatkan melalui direktif tool di go.mod. Ini menghilangkan kebutuhan akan solusi lama, yaitu menambahkan tool sebagai blank import dalam file dengan nama konvensional tools.go.
Akses terbatas ke direktori
Tipe os.Root baru untuk operasi file system yang terkontrol. Tipe os.Root menyediakan kemampuan untuk menjalankan operasi file system di dalam direktori tertentu, sehingga mencegah akses di luar path yang ditentukan.
Peningkatan pengujian
Paket testing/synctest baru untuk menguji kode konkuren. Fungsi synctest.Run memulai grup goroutine dalam "bubble" yang terisolasi, dan fungsi synctest.Wait menunggu hingga semua goroutine dalam bubble saat ini terblokir. Paket ini bersifat eksperimental dan harus diaktifkan dengan menetapkan GOEXPERIMENT=synctest saat build.
Build cache
Executable go run kini di-cache untuk eksekusi yang lebih cepat. Ini membuat cache menjadi lebih besar, tetapi eksekusi berulang menjadi lebih cepat.
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 escape. #cgo nocallback cFunctionName memberi tahu compiler bahwa fungsi C tidak akan memanggil kembali fungsi Go.
Weak pointer
Dukungan untuk weak pointer agar dapat mereferensikan memori dengan aman tanpa mencegahnya direklamasi. Weak pointer disediakan sebagai primitive tingkat rendah untuk memungkinkan pembuatan struktur yang efisien memori, seperti weak map untuk asosiasi nilai, normalization map, dan berbagai jenis cache.
Peningkatan pengujian benchmark
Metode testing.B.Loop baru untuk benchmark yang lebih cepat dan lebih sedikit kesalahan. Fungsi benchmark dijalankan tepat satu kali per -count, sehingga tahap setup dan cleanup yang mahal hanya dijalankan sekali. Parameter pemanggilan fungsi dan hasilnya tetap dipertahankan, sehingga compiler tidak dapat sepenuhnya mengoptimalkan body loop.
Versi Go 1.24 tampaknya akan menjadi rilis penting yang menghadirkan peningkatan besar di berbagai aspek bahasa ini dan ekosistemnya.
4 komentar
Bagi yang menggunakan Go, adakah fitur yang kalian harapkan?
Saya pribadi ingin ada operator seperti
.?dan??, dan kalau bisa juga macro.Sejujurnya,
struct tagitu sebuah kesalahan.Saya pribadi juga sangat berharap ada macro, sampai kapan harus
generateterus begini huhuhuSaya penasaran kenapa
struct tagdianggap sebagai kesalahan.Masalah terbesarnya adalah sulit mendapatkan bantuan dari alat.
json, tidak ada autocompletion atau IntelliSense.gomodifytagsjuga sudah ada sejak lama, tetapi integrasinya dengan ekstensi Go di VSC juga cukup terlambat.