Rilis Go 1.25
(go.dev)Go versi 1.25 telah resmi dirilis. Versi ini mencakup berbagai peningkatan pada tool, runtime, compiler, dan standard library, serta memperkenalkan fitur-fitur eksperimental penting yang dapat dicoba lebih awal oleh pengguna sambil memberikan masukan.
- Fitur utama:
- Mempertahankan kompatibilitas dengan Go 1
- Peningkatan luas pada tool, runtime, compiler, library, dan lainnya
- Pengenalan fitur eksperimental baru (GreenTea GC, paket json/v2)
Fitur eksperimental utama
Go 1.25 menyertakan dua fitur eksperimental utama yang ditujukan untuk meningkatkan performa dan kapabilitas, dan pengguna dapat mengaktifkannya melalui pengaturan environment variable.
GreenTea garbage collector (GC) baru
Tujuannya adalah meningkatkan performa dengan mengurangi overhead GC yang muncul saat menangani banyak objek kecil.
- Cara kerja: Objek kecil berukuran di bawah 512 byte dikelompokkan untuk GC dalam unit 'memory span' berukuran 8KiB. Dengan ini, locality memori meningkat sehingga efisiensi cache CPU dapat dimaksimalkan.
- Dampak yang diharapkan:
- Peningkatan performa GC berkat berkurangnya biaya lompatan memori
- Operasi yang efisien pada lingkungan multi-core
- Pengurangan overhead alokasi objek kecil dan fragmentasi memori
- Cara mengaktifkan: Set environment variable
GOEXPERIMENT=greenteagcsaat build
Paket encoding/json/v2 baru
Ini adalah implementasi JSON yang dirancang ulang untuk mengatasi kurangnya konsistensi, perilaku yang sulit diprediksi, dan masalah performa pada encoding/json (v1) yang ada saat ini.
-
Tujuan utama:
- Meningkatkan akurasi dan prediktabilitas: Secara default menerapkan aturan yang lebih ketat (misalnya peka huruf besar-kecil, melarang duplicate key) untuk mengurangi perilaku tak terduga.
- Peningkatan performa: Engine parsing dan encoding didesain ulang untuk meningkatkan efisiensi.
- Fleksibilitas dan kontrol yang lebih besar: Memperkenalkan sistem opsi yang canggih agar developer dapat mengendalikan cara pemrosesan JSON secara rinci.
-
Perubahan utama (v2 dibanding v1):
- Pencocokan nama field: Berbeda dari pendekatan v1 yang tidak membedakan huruf besar-kecil, v2 secara default membedakan huruf besar-kecil secara ketat.
- Perubahan makna tag
omitempty: Jika v1 menghilangkan berdasarkan 'keadaan kosong' dari nilai Go (0, false, nil, dan sebagainya), v2 menghilangkan berdasarkan 'keadaan kosong' dari nilai JSON yang telah di-encode (null,"",{},[]). - Penanganan slice dan map
nil: v1 me-marshal kenull, tetapi v2 secara default me-marshal masing-masing menjadi[](array kosong) dan{}(objek kosong). - Unmarshal array: v1 mengizinkan panjang JSON array dan Go array berbeda, tetapi v2 mensyaratkan panjang harus benar-benar sama, jika tidak maka akan mengembalikan error.
- Penanganan duplicate key: v1 mengizinkan key duplikat (menimpa dengan nilai terakhir), tetapi v2 secara default mengembalikan error untuk memperkuat akurasi dan keamanan.
- Penanganan UTF-8 tidak valid: v1 otomatis mengganti karakter UTF-8 yang tidak valid (
\uFFFD), tetapi v2 secara default mengembalikan error untuk mencegah kerusakan data.
-
Fitur dan struktur baru:
- Struktur modular: Memisahkan parsing sintaks level rendah (paket
jsontext) dan transformasi semantik level tinggi (paketjson/v2) untuk meningkatkan kejelasan kode dan performa. - Sistem opsi yang kuat: Melalui
json.Options, berbagai perilaku dapat dikendalikan secara rinci, dan perilaku v1 juga dapat direproduksi sepenuhnya. - Penanganan tipe eksternal: Melalui opsi
WithMarshalers,WithUnmarshalers, logika serialisasi/deserialisasi dapat diinjeksi untuk tipe dari paket eksternal yang tidak mengimplementasikan interfaceMarshaler/Unmarshaler.
- Struktur modular: Memisahkan parsing sintaks level rendah (paket
-
Cara mengaktifkan: Set environment variable
GOEXPERIMENT=jsonv2saat build
Perubahan dan peningkatan utama
Rilis ini menghadirkan berbagai peningkatan untuk menaikkan produktivitas developer dan efisiensi eksekusi program.
-
Runtime
- GOMAXPROCS sadar lingkungan container: Di Linux, batas CPU cgroup dikenali secara otomatis untuk menetapkan nilai default
GOMAXPROCS, dan nilainya juga diperbarui secara dinamis saat sumber daya CPU berubah. - Trace Flight Recorder: Menyediakan fitur tracing ringan yang terus merekam runtime trace ke ring buffer di memori untuk membantu debugging bug yang jarang terjadi.
- GOMAXPROCS sadar lingkungan container: Di Linux, batas CPU cgroup dikenali secara otomatis untuk menetapkan nilai default
-
Tool dan Compiler
- Perbaikan bug nil pointer: Bug compiler yang menunda pemeriksaan nil pointer sejak Go 1.21 telah diperbaiki, sehingga kode yang sebelumnya berhasil secara tidak semestinya kini akan panic sebagaimana mestinya.
- Dukungan DWARF5: Menggunakan DWARF versi 5 untuk informasi debugging guna mengurangi ukuran biner dan waktu linking.
- Direktif
go.mod ignorebaru: Memungkinkan perintahgountuk mengabaikan direktori tertentu.
-
Standard Library
- Penambahan paket
testing/synctest: Paket baru untuk mendukung pengujian kode konkurensi, dengan kemampuan menjalankan pengujian secara terisolasi dalam waktu tervirtualisasi. - Peningkatan performa paket
crypto: Kecepatan penandatangananecdsadaned25519dalam mode FIPS menjadi 4 kali lebih cepat, dan kecepatan hashing SHA juga ditingkatkan. - Penambahan CrossOriginProtection di
net/http: Menyediakan fitur baru untuk melindungi dari serangan CSRF menggunakan Fetch Metadata pada browser modern.
- Penambahan paket
Perubahan port dan dukungan
- macOS: Mulai Go 1.25, diperlukan macOS 12 Monterey atau yang lebih baru.
- Windows: Port 32-bit
windows/armakan dihentikan dukungannya mulai setelah rilis ini.
Belum ada komentar.