3 poin oleh lemonmint 2024-12-20 | 4 komentar | Bagikan ke WhatsApp

[IMG] Overview of Go 1.24

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

 
secret3056 2024-12-20

Bagi yang menggunakan Go, adakah fitur yang kalian harapkan?
Saya pribadi ingin ada operator seperti .? dan ??, dan kalau bisa juga macro.

Sejujurnya, struct tag itu sebuah kesalahan.

 
gkswnsqja 2024-12-20

Saya pribadi juga sangat berharap ada macro, sampai kapan harus generate terus begini huhuhu

 
qkrqjadn 2024-12-20

Saya penasaran kenapa struct tag dianggap sebagai kesalahan.

 
secret3056 2024-12-20

Masalah terbesarnya adalah sulit mendapatkan bantuan dari alat.

  • Karena berbentuk string, typo pun sulit ditemukan sebagai error.
  • Selain json, tidak ada autocompletion atau IntelliSense.
  • Saat memakai beberapa alat, semuanya harus ditulis dalam satu baris, jadi sulit menghindari kesan bahwa keterbacaannya menurun.

gomodifytags juga sudah ada sejak lama, tetapi integrasinya dengan ekstensi Go di VSC juga cukup terlambat.