- Go 1.22 वर्ज़न, Go 1.21 के 6 महीने बाद जारी किया गया।
- ज़्यादातर बदलाव toolchain, runtime और library implementation में हैं।
- Go 1 compatibility promise बरकरार है, और उम्मीद है कि लगभग सभी Go प्रोग्राम पहले की तरह compile और run होंगे।
भाषा में बदलाव
for loop से जुड़े दो बदलाव हैं।
- पहले
for loop द्वारा घोषित variables एक बार बनाए जाते थे और हर iteration में update होते थे, लेकिन Go 1.22 में loop की हर iteration नया variable बनाती है, जिससे गलती से share होने वाले bug रोके जाते हैं।
for loop अब integers पर भी range कर सकता है।
टूल्स
Go command
- workspace में
vendor directory का उपयोग करके dependencies को manage किया जा सकता है।
go get अब module के बजाय पुराने GOPATH mode में support नहीं करता।
go mod init अब दूसरे vendoring tools की config files से module requirements import करने की कोशिश नहीं करता।
go test -cover अब उन packages के लिए भी coverage summary प्रिंट करता है जिनमें अपनी test files नहीं हैं।
Trace
trace tool का web UI, नए tracer को support करने के लिए आंशिक रूप से फिर से design किया गया है।
Vet
- loop variables के लिए
vet tool का behavior बदला गया है।
append में कोई value जोड़े बिना की गई calls के लिए नई warning जोड़ी गई है।
defer statement में time.Since इस्तेमाल करने पर होने वाली समस्या के लिए नई warning जोड़ी गई है।
log/slog calls में key-value pairs मेल न खाने पर नई warning जोड़ी गई है।
Runtime
- type-based garbage collection metadata को heap objects के और पास रखकर CPU performance में 1-3% सुधार किया गया है।
Compiler
- profile-guided optimization (PGO) builds अब पहले से ज़्यादा calls को devirtualize कर सकते हैं।
Linker
- linker के
-s और -w flags को इस तरह बदला गया है कि वे सभी platforms पर अधिक consistently काम करें।
Bootstrap
- Go 1.22 को bootstrap के लिए Go 1.20 की अंतिम point release या उससे ऊपर की ज़रूरत है।
Core libraries
नया math/rand/v2 package
math/rand/v2, standard library का पहला “v2” package है, जिसमें math/rand की तुलना में कई अहम बदलाव हैं।
नया go/version package
- Go version strings को validate और compare करने वाले functions को implement करने के लिए नया
go/version package जोड़ा गया है।
बेहतर routing patterns
- standard library की HTTP routing को और अधिक expressive बनाया गया है।
libraries में छोटे बदलाव
- अलग-अलग libraries में छोटे बदलाव और performance improvements शामिल हैं।
Ports
Darwin
- macOS पर 64-bit x86 architecture (
darwin/amd64 port) के लिए Go toolchain अब default रूप से position-independent executables (PIE) बनाता है।
Arm
GOARM environment variable का उपयोग करके software या hardware floating point चुना जा सकता है।
Loong64
loong64 port अब function arguments और results को registers के ज़रिए pass करता है।
OpenBSD
- OpenBSD पर big-endian 64-bit PowerPC (
openbsd/ppc64) के लिए experimental port जोड़ा गया है।
GN⁺ की राय
- इस Go 1.22 रिलीज़ में खास तौर पर
for loop के बदलाव और नए math/rand/v2 package का आना उल्लेखनीय है। ये बदलाव Go developers को बेहतर performance और stability देते हैं, और नई सुविधाएँ Go भाषा के विकास को दिखाती हैं।
math/rand/v2 package तेज़ algorithms और नए API के ज़रिए बेहतर random number generation देता है, जो cryptography और अन्य random-dependent applications के लिए अहम सुधार है।
- उम्मीद है कि Go 1.22 compatibility बनाए रखते हुए performance और developer experience को बेहतर करने वाली कई optimizations और नई सुविधाओं के साथ Go community पर सकारात्मक असर डालेगा।
1 टिप्पणियां
Hacker News की राय
io.Copyअब TCPConn से UnixConn में copy करते समय Linux केsplice(2)system call का उपयोग कर सकता है।iopackage में इस तरह के pattern से मिलने वाले फायदों की सराहना की गई।httpmuxgo121field के जरिए नियंत्रित किया जा सकता है।sql.Null[T]के जुड़ने का स्वागत किया गया। पहलेsqlboilerकेnullका उपयोग किया जाता था, जिसका APIsql.Nullजैसा है, और इसमें अतिरिक्त रूप सेIsSet() boolmethod भी है, जो बताता है कि value को स्पष्ट रूप से set किया गया है या नहीं।chilibrary को हटाया जा सकता है या नहीं, इस पर विचार किया जा रहा है।anykeyword के उपयोग पर भी राय साझा की गई।