9 poin oleh lemonmint 2025-08-13 | Belum ada komentar. | Bagikan ke WhatsApp

[IMG] Overview

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=greenteagc saat 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 ke null, 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 (paket json/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 interface Marshaler/Unmarshaler.
  • Cara mengaktifkan: Set environment variable GOEXPERIMENT=jsonv2 saat 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.
  • 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 ignore baru: Memungkinkan perintah go untuk 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 penandatanganan ecdsa dan ed25519 dalam 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.

Perubahan port dan dukungan

  • macOS: Mulai Go 1.25, diperlukan macOS 12 Monterey atau yang lebih baru.
  • Windows: Port 32-bit windows/arm akan dihentikan dukungannya mulai setelah rilis ini.

Belum ada komentar.

Belum ada komentar.