Apa yang Baru di Go 1.26? Panduan Lengkap Fitur Terbaru
Catatan pembaruan Go 1.26: pengaktifan Green Tea GC secara default, dukungan ekspresi pada new(), self-referential generics, dan penambahan fitur kriptografi.
Go 1.26 resmi dirilis pada Februari 2026. Fokus utama pembaruan pada versi ini adalah peningkatan efisiensi memori pada runtime dan penyesuaian sintaks untuk kebutuhan pengembangan harian.
Beberapa perubahan teknis yang hadir antara lain pengaktifan Green Tea Garbage Collector secara default, dukungan evaluasi ekspresi pada fungsi bawaan new(), serta penyederhanaan batasan generic yang kini mendukung pola self-referential constraint.
Daftar Isi
- Green Tea Garbage Collector (GTGC)
- Self-Referential Generics
- Dukungan Ekspresi pada new()
- Optimasi Compiler, Slice, dan Cgo
- Kriptografi dan Paket runtime/secret
- Cara Upgrade ke Go 1.26
- Catatan Kompatibilitas dan Migrasi
- Kesimpulan
- Referensi
Green Tea Garbage Collector (GTGC)

Pada Go 1.26, Green Tea Garbage Collector (GTGC) telah diaktifkan secara default, menggantikan implementasi GC terdahulu. Fitur ini sebelumnya telah diuji coba sebagai eksperimen pada Go 1.25 menggunakan flag GOEXPERIMENT=greenteagc.
Perbedaan utamanya terletak pada strategi pemindaian memori. GC Go versi sebelumnya menelusuri heap berdasarkan objek individual (object-centric). Ketika aplikasi menampung jutaan objek kecil yang tersebar di heap, penelusuran pointer antar-lokasi acak kerap memicu CPU cache miss yang memperlambat proses penandaan (marking).
GTGC mengubah alur kerja tersebut menjadi pemindaian berbasis blok memori (memory-block-centric). Objek yang terletak berdekatan dalam satu span halaman memori (8 KiB) dipindai secara berkelompok. Karakteristik ini memberikan beberapa pengaruh teknis:
- Efisiensi Siklus GC: Beban CPU saat fase GC berkurang sekitar 10% hingga 40% pada aplikasi dengan alokasi heap padat, seperti web server berlatensi rendah.
- Peningkatan Cache Locality: Pembacaan data dalam span memori yang berurutan meminimalkan latensi akses data dari RAM ke CPU cache.
- Pemanfaatan Instruksi Vektor (SIMD): Pada arsitektur prosesor tertentu (seperti Intel Ice Lake atau AMD Zen 4 ke atas), proses pemindaian blok dibantu oleh instruksi vektor hardware.
Catatan Operasional: Bila ditemukan anomali perilaku atau regresi performa pada beban kerja spesifik, GTGC dapat dinonaktifkan sementara saat kompilasi menggunakan build flag: GOEXPERIMENT=nogreenteagc.Self-Referential Generics
Pada Go 1.26 ini, batasan pada parameter tipe diperluas untuk mendukung self-referential constraints (atau F-bounded polymorphism).

Sebelumnya, interface yang membutuhkan referensi ke tipe implementasinya sendiri (misalnya struktur data tree, node berantai, atau builder) tidak dapat dideklarasikan secara langsung tanpa menggunakan any atau konversi tipe manual di runtime. Di Go 1.26, relasi tipe rekursif ini dapat dinyatakan secara type-safe:
package main
import "fmt"
// Go 1.26 mengizinkan constraint generic merujuk pada parameternya sendiri
type Node[T Node[T]] interface {
Parent() T
SetParent(T)
}
type TreeNode struct {
parent *TreeNode
val int
}
func (n *TreeNode) Parent() *TreeNode { return n.parent }
func (n *TreeNode) SetParent(p *TreeNode) { n.parent = p }
// Fungsi generic yang memanfaatkan self-referential constraint
func Connect[T Node[T]](child, parent T) {
child.SetParent(parent)
}
func main() {
parent := &TreeNode{val: 10}
child := &TreeNode{val: 20}
Connect(child, parent)
fmt.Printf("Connected: child parent val = %d\n", child.Parent().val)
}Penerapan self-referential generic constraint di Go 1.26
Pendekatan ini sangat berguna pada perancangan library, ORM, maupun abstraksi model yang mengandalkan keterkaitan tipe turunan tanpa menghilangkan pemeriksaan tipe saat kompilasi.
Dukungan Ekspresi pada new()
Sebelum Go 1.26, pembuatan pointer ke nilai literal sering kali membutuhkan fungsi pembantu (helper) semacam ini:
func IntPtr(v int) *int { return &v }
func StringPtr(v string) *string { return &v }
// Versi generic
func Ptr[T any](v T) *T { return &v }Fungsi pembantu pointer yang lazim digunakan sebelum Go 1.26
Fungsi tersebut dibutuhkan karena operator referensi & tidak dapat dipasangkan langsung ke literal nilai primitif, misalnya &25. Pola ini sering dijumpai saat memetakan payload API dengan field pointer opsional.
Mulai Go 1.26, fungsi bawaan new() diperluas agar dapat mengevaluasi ekspresi nilai secara langsung:
package main
type UserFilter struct {
Age *int
Active *bool
Role *string
}
func main() {
// Di Go 1.26, new() dapat menerima ekspresi nilai langsung:
filter := UserFilter{
Age: new(25),
Active: new(true),
Role: new("backend-engineer"),
}
_ = filter
}Inisialisasi pointer nilai menggunakan new(expr) di Go 1.26
Perubahan ini menyederhanakan penulisan struct tanpa perlu menyertakan fungsi pembantu pointer di setiap package.
Optimasi Compiler, Slice, dan Cgo
Selain pembaruan pada pengatur memori, Go 1.26 menyertakan beberapa optimasi pada compiler dan runtime:
| Area Optimasi | Peningkatan Teknis | Dampak Praktis |
|---|---|---|
| Alokasi Objek Kecil (< 512B) | Optimasi jalur cepat (fast path) pada alokator runtime | Meningkatkan efisiensi alokasi pada pemrosesan request HTTP dan gRPC. |
| Interoperabilitas Cgo | Reduksi overhead peralihan konteks (context switch) | Menurunkan latensi panggilan fungsi C sekitar 30%. |
| Analisis Escape Slice | Peningkatan presisi analisis masa hidup slice oleh compiler | Alokasi dialihkan ke stack bila slice tidak lolos (escape) ke heap. |
Kriptografi dan Paket runtime/secret
Pada aspek keamanan dan kriptografi, Go 1.26 menambahkan pembaruan pada standard library:
- Pertukaran Kunci TLS Pasca-Kuantum: Modul TLS kini mengaktifkan mekanisme pertukaran kunci hibrida (X25519Kyber768) secara bawaan untuk memitigasi risiko intersepsi lalu lintas data jangka panjang.
- Paket crypto/hpke: Implementasi standar Hybrid Public Key Encryption sesuai spesifikasi RFC 9180 untuk enkripsi data asimetris.
- Paket runtime/secret (Eksperimental): Menyediakan fungsi
secret.Do(func() { ... })untuk mengeksekusi penanganan kredensial sensitif. Memori dan register yang digunakan akan dibersihkan sesaat setelah eksekusi selesai. Paket ini memerlukan flag kompilasiGOEXPERIMENT=runtimesecret.
Cara Upgrade ke Go 1.26
Untuk menguji coba Go 1.26 tanpa mengubah instalasi Go utama pada sistem, instalasi berdampingan dapat dilakukan menggunakan download wrapper resmi:
# Pasang binary Go 1.26 berdampingan
go install golang.org/dl/go1.26.0@latest
go1.26.0 download
# Uji coba kompilasi dan pengetesan proyek
go1.26.0 version
go1.26.0 test ./...Instalasi multi-version Go melalui terminal
Untuk mengganti versi Go sistem secara manual pada Linux atau macOS menggunakan arsip tarball:
# Hapus direktori versi terdahulu
sudo rm -rf /usr/local/go
# Unduh arsip Go 1.26 sesuai arsitektur sistem
wget https://go.dev/dl/go1.26.0.linux-amd64.tar.gz
# Ekstrak ke /usr/local
sudo tar -C /usr/local -xzf go1.26.0.linux-amd64.tar.gzPerintah pembaruan manual di Linux / macOS
Pastikan instalasi berhasil dengan memeriksa versi aktif:
go version
# Output yang diharapkan:
# go version go1.26.0 linux/amd64Pemeriksaan versi Go aktif
Panduan instalasi langkah demi langkah untuk Windows (.msi) dan platform lainnya dapat dirujuk pada catatan berikut:

Catatan Kompatibilitas dan Migrasi
Go 1.26 mematuhi aturan Go 1 Compatibility Promise. Kode yang valid pada versi 1.x terdahulu dapat dikompilasi secara normal pada rilis ini. Meskipun demikian, disarankan untuk menjalankan rangkaian tes otomatis (go test ./...) sebelum melakukan deployment ke production.
Kesimpulan
Pembaruan Go 1.26 ini menitikberatkan pada efisiensi runtime melalui GTGC dan perbaikan sintaks kode melalui new(expr). Penyesuaian batasan generic rekursif serta penambahan paket keamanan standar memberikan fleksibilitas tambahan untuk perancangan aplikasi skala besar.
Terima kasih sudah membaca. Selamat mencoba, semoga catatan kecil ini bermanfaat.
Referensi
Catatan mengenai rilis berikutnya dapat dibaca pada tautan berikut:



