---
id: 149c0672eec2caba57477612564e9368
author: Lemon Mint
title: 'Ikhtisar Rilis Go 1.24: Swiss Table Maps, ML-KEM, os.Root, dan testing/synctest'
description: 'Ikhtisar teknis Go 1.24: peta bawaan Swiss Table, crypto/mlkem (FIPS 203), TLS Encrypted Client Hello, runtime.AddCleanup, os.Root, dan testing/synctest.'
language: id
date: 2024-12-20T00:23:21.60729Z
path: /blog/posts/whats-new-in-go-1-24-z83ff24d2
category: release
---

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.

![Overview of Go 1.24](/assets/images/whats-new-in-go1.24/overview.webp)
