1 poin oleh GN⁺ 2024-02-08 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-02-08
Komentar Hacker News
  • Seorang pengembang TypeScript membagikan pengalamannya baru-baru ini beralih ke bahasa Go. Awalnya ia menyampaikan kekhawatiran tentang kurangnya fungsi array di Go dan sistem tipe yang tidak terlalu fleksibel. Namun, setelah menggunakan Go, ia merasakan keunggulan pustaka standar, keamanan tipe, dan manfaat dari standar penulisan kode yang sudah tertanam. Integrasi routing ke pustaka standar juga dinilai positif.
  • Dibagikan tautan yang menyediakan catatan rilis interaktif untuk Go versi 1.22.
  • Seorang pengembang yang telah menggunakan Go selama lebih dari 9 tahun membandingkan Dart (untuk pengembangan Flutter) dengan Go. Dart berusaha menambahkan semua fitur yang mungkin, sedangkan Go sebaliknya mengejar kesederhanaan. Di Dart, cara inisialisasi kelas menjadi beragam hingga membingungkan, sehingga kesederhanaan Go terasa dirindukan. Ekspresi tunggal yang kompleks dengan map/stream dan sejenisnya di Dart bisa membingungkan saat debugging atau bagi pengembang pemula.
  • io.Copy kini dapat menggunakan system call Linux splice(2) saat menyalin dari TCPConn ke UnixConn. Peningkatan manfaat yang bisa diperoleh lewat pola seperti ini di paket io dinilai sangat baik.
  • Pola routing di Go 1.22 telah ditingkatkan, tetapi akibatnya bisa muncul beberapa masalah kompatibilitas kecil. Ini dapat dikendalikan melalui field httpmuxgo121.
  • Ada pengembang yang tidak menyukai fitur "cakupan fungsi" yang ditambahkan ke bahasa Go. Menurutnya, fitur ini tidak memberi kemudahan yang cukup dibanding kompleksitas tambahan yang dibawanya, dan terasa tidak cocok dengan gaya Go yang eksplisit dan sederhana.
  • Dibagikan tautan diskusi tentang setiap iterasi dalam loop yang membuat variabel baru di Go 1.22.
  • Penambahan sql.Null[T] disambut baik. Sebelumnya ada yang menggunakan null dari sqlboiler, yang memiliki API mirip sql.Null, serta tambahan metode IsSet() bool untuk mengetahui apakah nilainya sudah diatur secara eksplisit.
  • Penambahan routing ke pustaka standar disambut baik, dan ada yang sedang mempertimbangkan apakah pustaka chi bisa dihapus.
  • Di antara para pengembang yang menggunakan Go di produksi, muncul pertanyaan apakah mereka cepat beralih ke versi baru atau tetap bertahan di rilis lama. Pendapat tentang penggunaan kata kunci any juga dibagikan.