- Versi Go 1.22 dirilis 6 bulan setelah Go 1.21.
- Sebagian besar perubahan ada pada implementasi toolchain, runtime, dan library.
- Janji kompatibilitas Go 1 tetap dipertahankan, dan hampir semua program Go diharapkan dapat dikompilasi dan dijalankan seperti sebelumnya.
Perubahan bahasa
- Ada dua perubahan pada loop "for".
- Sebelumnya, variabel yang dideklarasikan oleh loop "for" dibuat satu kali lalu diperbarui di setiap iterasi, tetapi di Go 1.22 setiap iterasi loop membuat variabel baru untuk mencegah bug akibat berbagi variabel tanpa sengaja.
- Loop "for" kini dapat melakukan range pada bilangan bulat.
Alat
Perintah Go
- Dependensi kini dapat dikelola menggunakan direktori
vendor di workspace.
go get tidak lagi didukung dalam mode GOPATH lama yang bukan berbasis modul.
go mod init kini tidak lagi mencoba mengimpor kebutuhan modul dari file konfigurasi alat vendoring lain.
go test -cover kini menampilkan ringkasan coverage untuk paket yang tidak memiliki file uji sendiri.
Trace
- UI web dari alat
trace didesain ulang sebagian untuk mendukung tracer baru.
Vet
- Perilaku alat
vet terhadap variabel loop telah berubah.
- Peringatan baru ditambahkan untuk pemanggilan
append yang tidak menambahkan nilai apa pun.
- Peringatan baru ditambahkan untuk masalah yang muncul saat menggunakan
time.Since dalam pernyataan defer.
- Peringatan baru ditambahkan ketika pasangan key-value tidak cocok dalam pemanggilan
log/slog.
Runtime
- Metadata garbage collection berbasis tipe disimpan lebih dekat ke objek heap, meningkatkan performa CPU sebesar 1-3%.
Compiler
- Build dengan profile-guided optimization (PGO) kini dapat mendevirtualisasi lebih banyak pemanggilan dibanding sebelumnya.
Linker
- Flag
-s dan -w pada linker diubah agar bekerja lebih konsisten di semua platform.
Bootstrap
- Go 1.22 memerlukan rilis patch terakhir Go 1.20 atau yang lebih baru untuk bootstrap.
Library inti
Paket math/rand/v2 baru
math/rand/v2 adalah paket “v2” pertama di standard library, dengan sejumlah perubahan penting dibandingkan math/rand.
Paket go/version baru
- Paket
go/version baru ditambahkan untuk mengimplementasikan fungsi yang memvalidasi dan membandingkan string versi Go.
Peningkatan pola routing
- Routing HTTP di standard library ditingkatkan agar lebih ekspresif.
Perubahan kecil pada library
- Ada berbagai perubahan kecil dan peningkatan performa di beragam library.
Port
Darwin
- Di macOS, untuk arsitektur x86 64-bit (
darwin/amd64 port), toolchain Go kini secara default menghasilkan position-independent executables (PIE).
Arm
- Variabel lingkungan
GOARM dapat digunakan untuk memilih floating point software atau hardware.
Loong64
- Port
loong64 kini meneruskan argumen dan hasil fungsi menggunakan register.
OpenBSD
- Port eksperimental untuk big-endian 64-bit PowerPC (
openbsd/ppc64) di OpenBSD telah ditambahkan.
Pendapat GN⁺
- Rilis Go 1.22 kali ini terutama menonjol karena perubahan pada loop "for" dan hadirnya paket
math/rand/v2 baru. Perubahan ini memberikan performa dan stabilitas yang lebih baik bagi pengembang Go, sekaligus mencerminkan evolusi bahasa Go.
- Paket
math/rand/v2 menawarkan kemampuan pembangkitan bilangan acak yang lebih baik melalui algoritma yang lebih cepat dan API baru, yang merupakan peningkatan penting untuk kriptografi dan aplikasi lain yang bergantung pada angka acak.
- Go 1.22 diharapkan memberi dampak positif bagi komunitas Go dengan menghadirkan berbagai optimasi dan fitur baru yang meningkatkan performa serta pengalaman pengembang sambil tetap menjaga kompatibilitas.
1 komentar
Komentar Hacker News
io.Copykini dapat menggunakan system call Linuxsplice(2)saat menyalin dari TCPConn ke UnixConn. Peningkatan manfaat yang bisa diperoleh lewat pola seperti ini di paketiodinilai sangat baik.httpmuxgo121.sql.Null[T]disambut baik. Sebelumnya ada yang menggunakannulldarisqlboiler, yang memiliki API miripsql.Null, serta tambahan metodeIsSet() booluntuk mengetahui apakah nilainya sudah diatur secara eksplisit.chibisa dihapus.anyjuga dibagikan.