Skip to content
Santekno.com | Tech Tutorials and Trends
ID
📖 0%
News Go

Go 1.23 Rilis: Range over Functions, Iterators, dan Timer Fix

20 May 2026 · 3 menit baca · Ihsan Arif

Go 1.23 membawa fitur yang ditunggu-tunggu: range over function values (iterator pattern resmi), perbaikan timer/ticker, dan perubahan pada package slices & maps. Ini yang perlu kamu tahu.

Go 1.23 resmi dirilis pada Agustus 2026. Versi ini membawa range over function values sebagai fitur bahasa stabil untuk pertama kalinya, perbaikan perilaku time.Timer yang sudah lama ditunggu, dan sejumlah tambahan di standard library.

Apa yang Baru?

Tiga highlight utama Go 1.23:

  • Range over functions — iterator pattern resmi menggunakan iter.Seq dan iter.Seq2
  • Timer/Ticker reset yang benar — tidak perlu drain channel lagi setelah Reset()
  • slices dan maps bertambahSorted, Collect, AppendSeq dan kawan-kawan

Selain itu, Go 1.23 juga menaikkan requirement minimum ke PHP 8.41 — wait, salah. Go 1.23 menaikkan requirement minimum toolchain ke Go 1.21 untuk upgrade.

Danger
“We want Go 1.23 to be the most ergonomic release yet for working with sequences of data.” — Tim Golang

Range over Functions

Fitur paling dinantikan: kamu sekarang bisa menulis custom iterator yang bisa di-range:

iterator.go
 1// Definisi iterator menggunakan iter.Seq2
 2func Backward[E any](s []E) iter.Seq2[int, E] {
 3    return func(yield func(int, E) bool) {
 4        for i := len(s) - 1; i >= 0; i-- {
 5            if !yield(i, s[i]) {
 6                return // stop iteration
 7            }
 8        }
 9    }
10}
11
12// Penggunaan — terasa seperti range biasa
13for i, v := range Backward([]string{"a", "b", "c"}) {
14    fmt.Println(i, v)
15}
16// Output:
17// 2 c
18// 1 b
19// 0 a
Tip
Package iter sudah ada di standard library sejak Go 1.22 sebagai fitur experimental. Di Go 1.23 statusnya berubah menjadi stable dan siap production.

Tiga Signature Iterator

Go mendukung tiga jenis iterator function:

SignatureDipakai untuk
func(yield func() bool)Iterasi tanpa value
func(yield func(V) bool)iter.Seq[V]Iterasi satu value (seperti range slice)
func(yield func(K, V) bool)iter.Seq2[K,V]Iterasi dua value (seperti range map)

Perbaikan Timer dan Ticker

Ini perubahan breaking kecil yang memperbaiki ==perilaku tidak intuitif== yang ada sejak Go 1.0:

timer.go
 1// ❌ Sebelum Go 1.23 — harus drain channel sebelum Reset
 2timer.Stop()
 3select {
 4case <-timer.C:
 5default:
 6}
 7timer.Reset(d)
 8
 9// ✅ Go 1.23 — cukup Reset saja, aman
10timer.Reset(d)
Caution
Perubahan timer bersifat opt-in melalui GODEBUG=asynctimerchan=0. Periksa panduan migrasi resmi sebelum upgrade di production — code yang bergantung pada drain manual bisa berperilaku berbeda.

Penambahan di Standard Library

package slices

Beberapa fungsi baru yang memanfaatkan iterator:

Fungsi baruKegunaan
slices.Sorted(seq)Kumpulkan iterator jadi slice terurut
slices.SortedFunc(seq, cmp)Sama, dengan custom comparator
slices.Collect(seq)Kumpulkan iter.Seq jadi slice
slices.AppendSeq(s, seq)Append semua item dari iterator ke slice

package maps

go
1// Iterasi semua entri map sebagai iter.Seq2
2for k, v := range maps.All(m) {
3    fmt.Println(k, v)
4}
5
6// Kumpulkan pasangan key-value dari iterator jadi map
7m := maps.Collect(pairs)

Fungsi maps lainnya

  • maps.Keys(m) — iterator atas semua key
  • maps.Values(m) — iterator atas semua value
  • maps.Insert(m, seq) — insert semua pasangan dari iterator

Cara Upgrade

Upgrade dari Go 1.22 ke 1.23 relatif mulus untuk sebagian besar project:

bash
1# Unduh Go 1.23
2go install golang.org/dl/go1.23@latest
3go1.23 download
4
5# Update go.mod
6go mod tidy
7
8# Jalankan test
9go test ./...
Aturan
Selalu baca release notes resmi Go 1.23 sebelum upgrade production. Periksa khususnya bagian Ports, Tools, dan perubahan GODEBUG yang mempengaruhi perilaku timer.
Danger
Jika project kamu menggunakan CGO dengan platform tertentu, pastikan cek bagian Ports di release notes — beberapa target platform lama mungkin tidak lagi didukung di Go 1.23.

Ringkasan

Go 1.23 bukan rilis besar dari sisi performa, tapi besar dari sisi ergonomis bahasa. Iterator pattern yang sudah lama dirindukan kini resmi dan stabil. Untuk project baru, segera pakai 1.23. Untuk project existing, uji di staging lebih dahulu — terutama jika code kamu bergantung pada perilaku timer lama.


  1. Catatan: ini adalah contoh footnote. Referensi footnote ditulis di akhir artikel dan dirender secara otomatis oleh Hugo. ↩︎

IH
Ihsan Arif
Backend engineer & penulis di Santekno. Aktif menulis tentang Go, Laravel, dan arsitektur backend modern.
Follow

💬 Komentar