Go 1.24 रिलीज़
(go.dev)- Go 1.24, Go 1.23 के बाद का आधिकारिक अपडेट है, और इसमें language features से लेकर runtime, standard library और WebAssembly तक ऐसे व्यापक बदलाव शामिल हैं जिन्हें डेवलपर तुरंत महसूस कर सकते हैं
- भाषा स्तर पर यह generic type aliases को पूरी तरह सपोर्ट करता है, जिससे type aliases को भी defined types की तरह parameterize किया जा सकता है
- runtime में Swiss Tables आधारित
map, छोटे objects के allocation में सुधार, और internal mutex बदलावों के कारण प्रतिनिधि benchmarks में औसतन CPU overhead 2–3% कम दिखता है gocommand अब module की tool dependencies को track और run करने का flow जोड़ता है, औरgo vettest-संबंधित declaration गलतियों को बेहतर तरीके से पकड़ता है- standard library और platform support भी बढ़ाया गया है, इसलिए FIPS 140-3,
testing.B.Loop,os.Root,runtime.AddCleanup,go:wasmexport, और WASI reactor/library builds को देखना ज़रूरी है
Go 1.24 में बदलावों का दायरा
- Go 1.24, Go 1.23 की तुलना में कई सुधारों वाला रिलीज़ है, और पूरी बदलाव सूची Go 1.24 release notes में देखी जा सकती है
- नया वर्ज़न Go download page से प्राप्त किया जा सकता है
भाषा में बदलाव: generic type aliases
- Go 1.24 generic type aliases को पूरी तरह सपोर्ट करता है
- type aliases को भी defined types की तरह parameterize किया जा सकता है, जिससे generic code में अभिव्यक्ति का दायरा बढ़ता है
- विस्तृत syntax language spec में शामिल है
runtime performance में सुधार
- runtime सुधारों से प्रतिनिधि benchmark सेट में औसतन CPU overhead 2–3% कम हुआ है
- performance बदलाव के तीन मुख्य आधार हैं
- Swiss Tables आधारित नया built-in
mapimplementation - छोटे objects के लिए अधिक efficient memory allocation
- नया runtime internal mutex implementation
- Swiss Tables आधारित नया built-in
Go tools में सुधार
gocommand module की tool dependencies को track करने का mechanism देता हैgo get -toolसे current module मेंtooldirective जोड़ा जाता हैgo tool [tool name]सेtooldirective में घोषित tool चलाया जाता है- अधिक जानकारी release notes के go command सेक्शन में है
go vetsubcommand में नयाtestanalyzer जोड़ा गया है- यह test packages की tests, fuzzers, benchmarks, और example declarations में आम गलतियों की रिपोर्ट करता है
- अधिक जानकारी release notes के vet सेक्शन में है
standard library और runtime API additions
- standard library में FIPS 140-3 compliance में मदद करने वाले नए mechanisms का सेट शामिल है
- approved algorithms के लिए इन नए mechanisms का उपयोग करने हेतु application source code में बदलाव की ज़रूरत नहीं है
- अधिक जानकारी release notes के FIPS 140-3 compliance सेक्शन में है
- FIPS 140 के अलावा, पहले x/crypto module में मौजूद कई packages अब standard library में उपलब्ध हैं
- benchmark code अब
testing.B.Loopmethod का उपयोग कर सकता है- benchmark iterations को
for b.Loop() { ... }रूप में चलाया जाता है - यह
for range b.Nजैसेb.Nआधारित सामान्य loop structure की जगह ले सकता है - यह तरीका अधिक तेज़ है और इसमें गलती की संभावना कम है
- benchmark iterations को
- नया
os.Roottype किसी खास directory के नीचे सीमित filesystem operations को संभव बनाता है - runtime में नया cleanup mechanism
runtime.AddCleanupजोड़ा गया है- यह
runtime.SetFinalizerकी तुलना में अधिक flexible, efficient, और कम error-prone है
- यह
WebAssembly support में सुधार
- Go 1.24 एक नया
go:wasmexportdirective जोड़ता है, जिससे Go programs WebAssembly host के लिए functions export कर सकते हैं - Go programs को WASI reactor/library के रूप में build किया जा सकता है
- अधिक जानकारी release notes के WebAssembly सेक्शन में है
आगे की जानकारी और feedback
- पूरी विस्तृत जानकारी Go 1.24 release notes में है
- कुछ विषयों को आगे आने वाले blog posts में और गहराई से कवर किया जाएगा
- यदि कोई समस्या मिले, तो issue दर्ज की जा सकती है
1 टिप्पणियां
Hacker News की राय
तेज़ map implementation खास तौर पर स्वागतयोग्य है, और यह भी अच्छा है कि
text/templateअबrange-over-funcको सपोर्ट करता हैGo 1.23 में function type पर range जोड़ा गया था, लेकिन अब तक Go templates में यह काम नहीं करता था
यह इतना सादा और बिना ड्रामे का है कि अच्छा लगता है
सोच रहा हूँ
os.Rootका use case क्या होगामेरी समझ से इसका संबंध https://github.com/golang/go/issues/67002 की तरह security से है, लेकिन क्योंकि यह अंदरूनी तौर on
Chrootइस्तेमाल नहीं करता, तो लगता है कि आखिरकार कोई न कोई Root के बाहर निकलने का तरीका ढूँढ सकता हैchrootका मतलब तभी है जब application यह तय कर सके कि वह आगे भी सिर्फ एक ही directory के अंदर काम करेगीइसके अलावा process के पास superuser privileges होने चाहिए, इसलिए इसे सामान्य user permissions पर चलने वाली applications में इस्तेमाल नहीं किया जा सकता
os.Root()ज़्यादा safety belt जैसा है जो file system operations पर लगाया जाता है. जैसे application cache से जुड़े कामों को cache directory तक सीमित करना, या file server को सिर्फ सही shared directory के अंदर की files serve करने देना. यहchrootजैसी लोहे की गारंटी नहीं देता, लेकिन साधारण directory traversal attacks को रोक देता हैchrootक्यों इस्तेमाल करना चाहिएअगर Capsicum जैसी sandbox features के साथ हो, तो capability mode में जाने से पहले directory खोली जा सकती है, और बाद में
os.Rootके साथ उस खुली हुई directory के नीचे file system tree की files खोली जा सकती हैंजानना चाहता हूँ कि
toolsdirective से बताए गए tools install करते समय इस्तेमाल होने वाले tags को specify किया जा सकता है या नहींमैंने नीचे की तरह कोशिश की, लेकिन लगता है यह tags के बिना install हो रहा है
go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latestलिखा है कि
GODEBUG=fips140=onlyइस्तेमाल करने पर FIPS 140-3 के अनुरूप न होने वाले cryptographic algorithms error लौटाएँगे या panic करेंगे, लेकिन standard library का जानबूझकर panic करना मुझे खास पसंद नहीं हैमैंने अभी code नहीं देखा, लेकिन सोच रहा हूँ कि backward compatibility की वजह से क्या यह सिर्फ उन्हीं functions में ऐसा करता है जो अभी error return नहीं करते
अगर runtime पर यह verify न किया जाए कि FIPS enabled है, तो compliance टूटने का जोखिम रहता है, और फिर audit और अंतहीन meetings शुरू हो जाती हैं. नए controls और validation procedures बनाने में कई दिन लगाने से बेहतर है कि panic की वजह से 30 मिनट का outage हो जाए
इस तरह का behavior उन स्थितियों में काम आता है जिन्हें सिर्फ runtime पर detect किया जा सकता है. ज़रा-सा basic test coverage भी हो तो यह तुरंत सामने आ जाएगा
cryptography वाले context में यह कितना ठीक है, इस पर संदेह है. मुझे नहीं लगता कि warning log level सही होगा. अगर चीज़ महत्वपूर्ण है और उस पर action लिया जा सकता है, तो वह error या fatal log होनी चाहिए; नहीं तो info log काफ़ी है
https://devblogs.microsoft.com/go/go-1-24-fips-update/
इसे hidden bugs से बचने के तरीके के रूप में भी देखा जा सकता है. यह कुछ-कुछ "The server chose violence" [1] [2] जैसा है, और यह भी सोचने लायक है कि Postel's law ने interoperability को कितना नुकसान पहुँचाया है. FIPS certification के कई पहलुओं में यह बात अक्सर भुला दी जाती है
[1] https://cliffle.com/blog/hubris-reply-fault/
[2] https://news.ycombinator.com/item?id=40178652
आखिरकार generic type aliases आ गए, और यह feature काफ़ी पहले से चाहिए था
नया tool flag सबसे ज़्यादा रोमांचक लग रहा है. अब बदसूरत
tools.goसे छुटकारा मिल सकता हैबढ़िया. मैं इस release का इंतज़ार
GOAUTHकी वजह से कर रहा थाउम्मीद है private git repositories के साथ काम करना कम झंझट वाला होगा, लेकिन
go help goauthदेखकर बहुत ज़्यादा उम्मीद नहीं बंधती