Go 1.25 जारी
(go.dev)Go 1.25 संस्करण आधिकारिक रूप से जारी कर दिया गया है। इस संस्करण में tools, runtime, compiler और standard library के विभिन्न हिस्सों में सुधार शामिल हैं, और खास तौर पर कुछ महत्वपूर्ण experimental features पेश किए गए हैं जिन्हें उपयोगकर्ता पहले से आज़मा सकते हैं और उन पर feedback दे सकते हैं।
- मुख्य विशेषताएँ:
- Go 1 संस्करण के साथ compatibility बनाए रखना
- tools, runtime, compiler, library आदि में व्यापक सुधार
- नए experimental features (GreenTea GC, json/v2 package) की शुरुआत
प्रमुख experimental features
Go 1.25 में performance और functionality सुधारने के उद्देश्य से दो प्रमुख experimental features शामिल हैं, जिन्हें उपयोगकर्ता environment variable सेट करके सक्रिय कर सकते हैं।
नया GreenTea garbage collector (GC)
इसका उद्देश्य बहुत सारे छोटे objects को handle करते समय होने वाले GC overhead को कम करके performance बेहतर करना है।
- काम करने का तरीका: 512 bytes से छोटे objects को 8KiB आकार के 'memory span' units में group करके GC किया जाता है। इससे memory locality बढ़ती है और CPU cache efficiency अधिकतम होती है।
- अपेक्षित प्रभाव:
- memory jumping cost कम होने से GC performance में सुधार
- multi-core environment में अधिक efficient operation
- छोटे object allocation overhead और memory fragmentation में कमी
- सक्रिय करने का तरीका: build के समय
GOEXPERIMENT=greenteagcenvironment variable सेट करें
नया encoding/json/v2 package
यह मौजूदा encoding/json (v1) की consistency की कमी, अनुमान लगाना कठिन behavior, और performance समस्याओं को हल करने के लिए नया डिज़ाइन किया गया JSON implementation है।
-
मुख्य लक्ष्य:
- accuracy और predictability में सुधार: डिफ़ॉल्ट रूप से अधिक सख्त नियम (जैसे case sensitivity, duplicate key निषेध) लागू करके unexpected behavior कम किया गया है।
- performance सुधार: parsing और encoding engine को फिर से डिज़ाइन करके efficiency बढ़ाई गई है।
- flexibility और control का विस्तार: एक परिष्कृत options system जोड़ा गया है ताकि developers JSON processing के तरीके को बारीकी से नियंत्रित कर सकें।
-
मुख्य बदलाव (v1 की तुलना में v2):
- field name matching: v1 के case-insensitive तरीके के विपरीत, v2 डिफ़ॉल्ट रूप से case-sensitive है।
omitemptytag के अर्थ में बदलाव: v1 में Go value की 'empty state' (0, false, nil आदि) के आधार पर field छोड़ा जाता था, जबकि v2 में encoded JSON value की 'empty state' (null,"",{},[]) के आधार पर field छोड़ा जाता है।nilslice और map handling: v1 इन्हेंnullमें marshal करता था, लेकिन v2 डिफ़ॉल्ट रूप से इन्हें क्रमशः[](empty array) और{}(empty object) में marshal करता है।- array unmarshal: v1 JSON array और Go array की length अलग होने पर भी अनुमति देता था, लेकिन v2 में length का बिल्कुल समान होना आवश्यक है, नहीं तो error लौटती है।
- duplicate key handling: v1 duplicate keys की अनुमति देता था (आखिरी value से overwrite), लेकिन v2 डिफ़ॉल्ट रूप से error लौटाता है, जिससे accuracy और security मजबूत होती है।
- invalid UTF-8 handling: v1 invalid UTF-8 characters को अपने-आप replace (
\uFFFD) कर देता था, लेकिन v2 डिफ़ॉल्ट रूप से error लौटाता है, जिससे data corruption रोका जा सकता है।
-
नई सुविधाएँ और संरचना:
- modular structure: low-level syntax analysis (
jsontextpackage) और high-level semantic conversion (json/v2package) को अलग करके code clarity और performance सुधारी गई है। - शक्तिशाली options system:
json.Optionsके जरिए विभिन्न behaviors को विस्तार से नियंत्रित किया जा सकता है, और v1 behavior को पूरी तरह reproduce करना भी संभव है। - external type handling:
WithMarshalers,WithUnmarshalersoptions के जरिए उन external package types के लिए serialization/deserialization logic inject की जा सकती है जोMarshaler/Unmarshalerinterface implement नहीं करते।
- modular structure: low-level syntax analysis (
-
सक्रिय करने का तरीका: build के समय
GOEXPERIMENT=jsonv2environment variable सेट करें
प्रमुख बदलाव और सुधार
इस release में developer productivity और program execution efficiency बढ़ाने के लिए कई तरह के सुधार किए गए हैं।
-
runtime
- container-aware GOMAXPROCS: Linux environment में cgroup की CPU limits को अपने-आप पहचानकर
GOMAXPROCSका default value सेट किया जाता है, और CPU resource बदलने पर इसे dynamically update भी किया जाता है। - Trace Flight Recorder: दुर्लभ bugs को debug करने के लिए memory के ring buffer में runtime traces को लगातार record करने वाली lightweight tracing feature प्रदान की गई है।
- container-aware GOMAXPROCS: Linux environment में cgroup की CPU limits को अपने-आप पहचानकर
-
tools & compiler
- nil pointer bug fix: Go 1.21 से मौजूद compiler bug, जो nil pointer checks को delay करता था, ठीक कर दिया गया है; इसलिए जो code पहले असामान्य रूप से सफल हो जाता था, वह अब सही तरह से panic करेगा।
- DWARF5 support: debugging information के लिए DWARF version 5 का उपयोग कर binary size और link time कम किया गया है।
- नया
go.mod ignoredirective:gocommand को कुछ directories को ignore करने के लिए configure किया जा सकता है।
-
standard library
testing/synctestpackage जोड़ा गया: concurrency code testing के लिए नया package, जिसमें tests को virtualized time में isolated तरीके से चलाया जा सकता है।cryptopackage performance सुधार: FIPS mode मेंecdsa,ed25519signature speed 4 गुना तेज हुई है, और SHA hashing speed भी बेहतर हुई है।net/httpCrossOriginProtection जोड़ा गया: modern browsers के Fetch metadata का उपयोग करके CSRF attacks से बचाव के लिए नई functionality प्रदान की गई है।
ports और support में बदलाव
- macOS: Go 1.25 से macOS 12 Monterey या उससे ऊपर का संस्करण आवश्यक है।
- Windows: 32-bit
windows/armport के लिए support इस release के बाद बंद कर दिया जाएगा.
अभी कोई टिप्पणी नहीं है.