1.24 پر جائیں۔

1.24 پر جائیں۔

گو زبان کی ایک نئی ریلیز، ورژن 1.24، چھ ماہ بعد آتی ہے۔ 1.23 پر جائیں۔. زیادہ تر تبدیلیاں ٹول چین، رن ٹائم اور لائبریریوں کے نفاذ میں ہیں۔ ہمیشہ کی طرح، رہائی فراہم کرتا ہے مطابقت کا وعدہ گو 1۔ لینگویج ڈیزائنرز توقع کرتے ہیں کہ تقریباً تمام گو پروگرام پہلے کی طرح مرتب اور چلتے رہیں گے۔

زبان میں تبدیلیاں

Go 1.24 اب مکمل طور پر سپورٹ کرتا ہے۔ عام قسم کے عرفی نام: ایک قسم عرف کو اعلان شدہ قسم کے طور پر پیرامیٹرائز کیا جاسکتا ہے۔ تفصیلات میں زبان کی وضاحتیں. ابھی کے لیے، اس فیچر کو GOEXPERIMENT=noaliastypeparams سیٹ کر کے غیر فعال کیا جا سکتا ہے۔ تاہم، Go 1.25 میں aliastypeparams آپشن کو ہٹا دیا جائے گا۔

فورم کے اوزار

جاؤ حکم

Go ماڈیول اب go.mod میں ٹول ڈائرکٹیو کا استعمال کرتے ہوئے قابل عمل انحصار کو ٹریک کر سکتے ہیں۔ یہ ایک فائل میں خالی درآمدات کے طور پر ٹولز کو شامل کرنے کے پچھلے کام کی ضرورت کو ہٹا دیتا ہے جسے عام طور پر "tools.go" کہا جاتا ہے۔ گو ٹول کمانڈ اب ان ٹولز کو گو کے ساتھ آنے والے ٹولز کے علاوہ چلا سکتی ہے۔ مزید معلومات پر مل سکتی ہیں۔ دستاویزات.

نئے ٹول فلیگ فار go get کی وجہ سے ٹول ڈائریکٹیو کو موجودہ ماڈیول میں مخصوص پیکجوں کے لیے شامل کرنے کے علاوہ مطلوبہ ڈائریکٹیوز شامل کرنے کا سبب بنتا ہے۔

نئی میٹا پیٹرن ٹول موجودہ ماڈیول کے تمام ٹولز سے مراد ہے۔ اس کا استعمال ان سب کو گو گیٹ ٹول کے ذریعے اپ ڈیٹ کرنے، یا گو انسٹال ٹول کے ذریعے اپنی GOBIN ڈائرکٹری میں انسٹال کرنے کے لیے کیا جا سکتا ہے۔

گو رن کے ذریعے بنائے گئے ایگزیکیوٹیبلز اور گو ٹول کے نئے رویے کو اب گو بلڈ کیشے میں محفوظ کیا گیا ہے۔ یہ بڑھتی ہوئی کیش کی وجہ سے بار بار لانچوں کو ممکن بناتا ہے۔ 69290 #.

go build and go install کمانڈز اب -json فلیگ کو قبول کرتے ہیں، جو معیاری آؤٹ پٹ پر ساختی JSON آؤٹ پٹ کے طور پر تعمیراتی آؤٹ پٹ اور غلطیوں کی رپورٹ کرتا ہے۔ فارمیٹ کی تفصیلات go help buildjson میں دیکھی جا سکتی ہیں۔

مزید برآں، go test -json اب JSON میں آؤٹ پٹ اور بلڈ غلطیوں کی اطلاع دیتا ہے، جو کہ ٹیسٹ کے نتیجے JSON کے ساتھ ملا ہوا ہے۔ انہیں ایکشن کی نئی اقسام سے پہچانا جا سکتا ہے، لیکن اگر وہ ٹیسٹ انٹیگریشن سسٹم میں مسائل کا باعث بنتے ہیں، تو آپ اس کے ذریعے تعمیر کے ٹیکسٹ آؤٹ پٹ پر واپس آ سکتے ہیں۔ GODEBUG سیٹ اپ gotestjsonbuildtext=1۔

نیا GOAUTH ماحولیاتی متغیر نجی ماڈیول کھینچنے کی اجازت دینے کا ایک لچکدار طریقہ فراہم کرتا ہے۔ آپ go help goauth میں تفصیلات دیکھ سکتے ہیں۔

گو بلڈ کمانڈ اب انسٹال ہے۔ مرکزی ماڈیول کا ورژن مرتب شدہ بائنری میں، ٹیگ اور/یا ورژن کنٹرول کمٹ کی بنیاد پر۔ اگر غیر ارتکاب تبدیلیاں ہوں تو +dirty لاحقہ شامل کیا جائے گا۔ -buildvcs=false پرچم بائنری سے ورژن کنٹرول کی معلومات کو چھوڑنے کے لیے استعمال کیا جا سکتا ہے۔

نئی GODEBUG سیٹ اپ ٹول چینٹریس = 1 اب go کمانڈ میں ٹول چین کے انتخاب کے عمل کو ٹریک کرنے کے لیے استعمال کیا جا سکتا ہے۔

سی جی او

Cgo رن ٹائم کارکردگی کو بہتر بنانے کے لیے C فنکشنز کے لیے نئی تشریحات کی حمایت کرتا ہے۔ #cgo noescape cFunctionName کمپائلر کو بتاتا ہے کہ C فنکشن cFunctionName کو بھیجی گئی میموری فرار نہیں ہوئی ہے۔ #cgo nocallback cFunctionName کمپائلر کو بتاتا ہے کہ C فنکشن cFunctionName کسی بھی گو فنکشن کو واپس نہیں کرتا ہے۔ مزید معلومات پر مل سکتی ہیں۔ cgo دستاویزات.

Cgo فی الحال ایک C فنکشن میں کالز مرتب کرنے سے انکار کرتا ہے جس میں متعدد غیر مطابقت پذیر اعلانات ہوتے ہیں۔ مثال کے طور پر، اگر f کو void f(int) اور void f(ڈبل) دونوں کے طور پر قرار دیا جاتا ہے، cgo ممکنہ طور پر غلط کالنگ ترتیب f(0) پیدا کرنے کے بجائے غلطی کی اطلاع دے گا۔ اس ریلیز میں نیا اس خرابی کی حالت کا پتہ لگانا بہتر ہے جب مختلف فائلوں میں غیر مطابقت پذیر اعلانات ظاہر ہوتے ہیں۔ 67699 #.

آبجڈمپ

objdump ٹول اب 64 بٹ LoongArch (GOARCH=loong64)، RISC-V (GOARCH=riscv64)، اور S390X (GOARCH=s390x) پر جدا کرنے کی حمایت کرتا ہے۔

موٹی

نیا ٹیسٹ اینالائزر ٹیسٹ، فزر، بینچ مارک، اور ٹیسٹ سویٹس میں مثال کے اعلانات میں عام غلطیوں کی رپورٹ کرتا ہے، جیسے کہ غلط نام، غلط دستخط، یا ایسی مثالیں جو غیر موجود شناخت کنندگان کو دستاویز کرتی ہیں۔ ان میں سے کچھ غلطیاں ٹیسٹوں کے ناکام ہونے کا سبب بن سکتی ہیں۔

موجودہ پرنٹ ایف پارسر اب فارم fmt.Printf(s) کی کالز کی تشخیص کی اطلاع دیتا ہے، جہاں s ایک غیر مستقل فارمیٹ سٹرنگ ہے جس میں کوئی اور دلیل نہیں ہے۔ اس طرح کی کالیں تقریباً ہمیشہ ایک غلطی ہوتی ہیں، کیونکہ s کی قدر میں % کریکٹر ہو سکتا ہے۔ اس کے بجائے fmt.Print استعمال کریں۔ 60529. یہ چیک موجودہ کوڈ میں چیزوں کو تلاش کرنے کا رجحان رکھتا ہے، اور اس وجہ سے صرف اس وقت لاگو ہوتا ہے جب زبان کا ورژن (جیسا کہ go.mod فائل کے گو ڈائریکٹیو یا `//go:build` تبصروں کے ذریعہ بیان کیا گیا ہے) کم از کم Go 1.24 ہو، تاکہ Go 1.24 ٹول چین میں اپ گریڈ کرتے وقت انضمام کے طویل وقفے سے بچا جا سکے۔

موجودہ بلڈ ٹیگ تجزیہ کار اب تشخیص کی اطلاع دیتا ہے جب کوئی غلط بلڈ ٹیگ ہوتا ہے۔ پرانے ورژن کی تعمیر کی حد //go:build directive میں جائیں۔ مثال کے طور پر، //go:build go1.23.1 سے مراد پوائنٹ ریلیز ہے۔ اس کے بجائے //go:build go1.23 استعمال کریں۔ 64127 #.

موجودہ کاپی لاک تجزیہ کار اب ایک تشخیصی کی اطلاع دیتا ہے جب ایک متغیر کو ٹرپل "for" لوپ میں ڈکلیئر کیا جاتا ہے، جیسے i := iter(); ہو گیا (i) i = next(i) { … }، sync.Locker پر مشتمل ہے، جیسے sync.Mutex۔ 1.22 پر جائیں۔ پچھلی تکرار سے اقدار کو نقل کرتے ہوئے، ہر تکرار کے لیے ایک نیا متغیر بنانے کے لیے اس طرح کے لوپس کے رویے کو تبدیل کر دیا؛ یہ کاپی تالے کے لیے محفوظ نہیں ہے۔ 66387 #.

گوکاچیپروگ

اندرونی cmd/go بائنری اور ٹیسٹ کیشنگ میکانزم کو اب چائلڈ پروسیسز کے ذریعے لاگو کیا جا سکتا ہے جو cmd/go ٹول اور GOCACHEPROG ماحول کے متغیر کے نام سے چائلڈ پروٹوکول کے درمیان JSON پروٹوکول کو نافذ کرتے ہیں۔ پہلے یہ GOEXPERIMENT کے لیے تھا۔ پروٹوکول کی تفصیلات اس میں دیکھی جا سکتی ہیں۔ دستاویزات.

تکمیل کا وقت

کئی رن ٹائم کارکردگی میں بہتری نے CPU اوور ہیڈ کو نمائندہ بینچ مارکس کے ایک سیٹ میں اوسطاً 2-3% تک کم کیا۔ درخواست کے لحاظ سے نتائج مختلف ہو سکتے ہیں۔ ان بہتریوں میں ایک نیا بلٹ ان نقشہ پر مبنی نفاذ شامل ہے۔ سویڈش میزیں۔، چھوٹی آبجیکٹ میموری کی زیادہ موثر مختص، اور mutex کا ایک نیا اندرونی رن ٹائم نفاذ۔

نئے بلٹ ان میپ کا نفاذ اور نئے اندرونی رن ٹائم mutex کو بالترتیب GOEXPERIMENT=noswissmap اور GOEXPERIMENT=nospinbitmutex کو تعمیراتی وقت پر ترتیب دے کر غیر فعال کیا جا سکتا ہے۔

مرتب کرنے والا

مرتب کرنے والے نے پہلے ہی وصول کنندگان کی اقسام کے ساتھ نئے طریقوں کی وضاحت کرنے سے منع کیا ہے جو cgo کے ذریعہ تیار کیے گئے تھے، لیکن اس پابندی کے ارد گرد ایک قسم کے عرف کے ذریعے کام کرنا ممکن تھا۔ Go 1.24 اب ہمیشہ ایک خرابی کی اطلاع دیتا ہے اگر وصول کنندہ cgo سے تیار کردہ قسم کو ظاہر کرتا ہے، یا تو براہ راست یا بالواسطہ (ایک قسم عرف کے ذریعے)۔

لنکر

لنکر اب ELF پلیٹ فارمز پر ایک GNU تعمیر شناخت کنندہ (ELF انٹری NT_GNU_BUILD_ID) اور میکوس پر بطور ڈیفالٹ UUID (Mach-O لوڈ کمانڈ LC_UUID) تیار کرتا ہے۔ بلڈ ID یا UUID گو بلڈ ID سے اخذ کیا گیا ہے۔ اسے -B none linker فلیگ کے ساتھ بند کیا جا سکتا ہے، یا صارف کی مخصوص ہیکساڈیسیمل قدر کے ساتھ -B 0xNNNN لنکر فلیگ کے ساتھ اوور رائیڈ کیا جا سکتا ہے۔

پروموشن

جیسا کہ میں کہا گیا ہے۔ 1.22 ریلیز نوٹ پر جائیں۔, Go 1.24 کو اب Go 1.22.6 یا اس کے بعد کا انسٹال کرنے کی ضرورت ہے۔ ڈویلپرز توقع کرتے ہیں کہ گو 1.26 کو رول آؤٹ کرنے کے لیے گو 1.24 یا اس کے بعد کے پوائنٹ ریلیز کی ضرورت ہوگی۔

معیاری لائبریری

ڈائریکٹری سے محدود فائل سسٹم تک رسائی

نئی قسم os.root ایک مخصوص ڈائرکٹری کے اندر فائل سسٹم کی کارروائیوں کو انجام دینے کی صلاحیت فراہم کرتا ہے۔

فنکشن os.OpenRoot ڈائریکٹری کھولتا ہے اور واپس آتا ہے۔ os.root. طریقے آن os.root اس ڈائرکٹری میں کام کرتے ہیں اور راستوں کو ڈائرکٹری کے باہر کے مقامات کا حوالہ دینے کی اجازت نہیں دیتے ہیں، بشمول وہ جو ڈائرکٹری کے باہر علامتی لنکس کی پیروی کرتے ہیں۔ os.Root پر طریقے OS پیکیج میں دستیاب فائل سسٹم کے زیادہ تر آپریشنز کی عکاسی کرتے ہیں، بشمول، مثال کے طور پر، os.Root.Open, os.Root.Create, os.Root.Mkdir и os.Root.Stat.

بینچ مارک کی نئی خصوصیت

بینچ مارکس اب تیز، کم غلطی کا شکار طریقہ استعمال کر سکتے ہیں۔ جانچ۔ بی لوپ ایک بینچ مارک پر اعادہ کرنا جیسے b.Loop() { … } کے لیے عام لوپ ڈھانچے کی بجائے bN جیسے رینج bN کے لیے یہ دو اہم فوائد پیش کرتا ہے:

  • بینچ مارک فنکشن فی گنتی میں بالکل ایک بار انجام دیا جاتا ہے، لہذا مہنگے سیٹ اپ اور صفائی کے اقدامات صرف ایک بار کیے جاتے ہیں۔
  • فنکشن کال پیرامیٹرز اور نتائج زندہ رہتے ہیں، کمپائلر کو مکمل طور پر لوپ باڈی کو بہتر بنانے سے روکتے ہیں۔

بہتر فائنلائزر

نئی سہولت runtime.AddCleanup ایک تکمیلی طریقہ کار ہے جو زیادہ لچکدار، زیادہ موثر اور کم غلطی کا شکار ہے runtime.SetFinalizer. AddCleanup کسی آبجیکٹ کے ساتھ کلین اپ فنکشن منسلک کرتا ہے جو آبجیکٹ کے دستیاب نہ ہوتے ہی چلایا جائے گا۔ تاہم، SetFinalizer کے برعکس، ایک ہی شے کے ساتھ متعدد کلین اپ منسلک کیے جا سکتے ہیں، کلین اپ کو اندرونی پوائنٹرز سے منسلک کیا جا سکتا ہے، کلین اپ عام طور پر اس وقت لیک کا سبب نہیں بنتے جب اشیاء ایک سائیکل بنتی ہیں، اور کلین اپ سے آبجیکٹ یا اشیاء کی ڈیل لوکیشن میں تاخیر نہیں ہوتی۔ نئے کوڈ کو سیٹ فائنائزر پر ایڈ کلین اپ کو ترجیح دینی چاہئے۔

نیا کمزور پیکج

نیا پیکج کمزور کمزور اشارے فراہم کرتا ہے۔

کمزور پوائنٹرز ایک نچلی سطح کے قدیم ہیں جو میموری سے موثر ڈھانچے بنانے کے لیے فراہم کیے گئے ہیں جیسے کہ اقدار کی نقشہ سازی کے لیے کمزور لغات، کسی بھی چیز کے لیے کینونیکلائزیشن لغات جو پیکیج میں شامل نہیں ہیں۔ منفرد، اور مختلف قسم کے کیشز۔ ان استعمال کے معاملات کی حمایت کرنے کے لیے، یہ ریلیز بھی فراہم کرتی ہے۔ runtime.AddCleanup и maphash.مقابلہ.

نیا crypto/mlkem پیکیج

نیا پیکج crypto/mlkem ML-KEM-768 اور ML-KEM-1024 کو نافذ کرتا ہے۔

ML-KEM ایک پوسٹ کوانٹم کلیدی تبادلے کا طریقہ کار ہے، جو پہلے Kyber کے نام سے جانا جاتا تھا اور ایف ایف سی 203.

نئے پیکیجز crypto/hkdf, crypto/pbkdf2 اور crypto/sha3

نیا پیکج crypto/hkdf HMAC پر مبنی "Extract-and-expand" کلیدی اخذ فنکشن HKDF کو لاگو کرتا ہے جیسا کہ اس میں بیان کیا گیا ہے۔ آر ایف سی 5869.

نیا پیکج crypto/pbkdf2 پاس ورڈ پر مبنی کلیدی اخذ فنکشن PBKDF2 کو لاگو کرتا ہے جیسا کہ میں بیان کیا گیا ہے۔ آر ایف سی 8018.

نیا پیکج crypto/sha3 SHA-3 ہیش فنکشن اور SHAKE اور cSHAKE ایکسٹینیبل آؤٹ پٹ فنکشن کو لاگو کرتا ہے جیسا کہ اس میں بیان کیا گیا ہے۔ ایف ایف سی 202.

تینوں پیکجز موجودہ golang.org/x/crypto/… پیکجز پر مبنی ہیں۔

FIPS 140-3 تعمیل

اس ریلیز میں شامل ہیں۔ FIPS 140-3 کی تعمیل کو یقینی بنانے کے لیے میکانزم کا ایک نیا سیٹ.

Go crypto ماڈیول اندرونی معیاری لائبریری پیکجوں کا ایک سیٹ ہے جو شفاف طریقے سے FIPS 140-3 منظور شدہ الگورتھم کو نافذ کرنے کے لیے استعمال کیا جاتا ہے۔ منظور شدہ الگورتھم کے لیے گو کریپٹو ماڈیول استعمال کرنے کے لیے ایپلی کیشنز کو تبدیلیوں کی ضرورت نہیں ہے۔

نئے ماحول کے متغیر GOFIPS140 کو تعمیر میں استعمال کرنے کے لیے Go crypto ماڈیول کے ورژن کو منتخب کرنے کے لیے استعمال کیا جا سکتا ہے۔ نیا GODEBUG سیٹ اپ fips140 کو رن ٹائم پر FIPS 140-3 موڈ کو فعال کرنے کے لیے استعمال کیا جا سکتا ہے۔

Go 1.24 میں Go crypto ماڈیول v1.0.0 شامل ہے، جس کا فی الحال CMVP سے منظور شدہ لیب کے ساتھ تجربہ کیا جا رہا ہے۔

نیا تجرباتی پیکج ٹیسٹنگ/ synctest

نیا تجرباتی پیکیج ٹیسٹنگ/ synctest سمورتی کوڈ کی جانچ کے لیے معاونت فراہم کرتا ہے۔

  • فنکشن synctest.run ایک الگ تھلگ "بلبلے" میں گوروٹینز کا ایک گروپ چلاتا ہے۔ پیکیج فنکشن کے بلبلے میں وقت جھوٹی گھڑیوں پر کام کریں۔
  • افعال synctest.wait اس وقت تک انتظار کریں جب تک کہ تمام گوروٹینز موجودہ بلبلے میں بلاک نہ ہوجائیں۔

تفصیلات پیکیج دستاویزات میں مل سکتی ہیں۔

synctest پیکیج تجرباتی ہے اور اسے GOEXPERIMENT=synctest ترتیب دے کر فعال کیا جانا چاہیے۔ پیکیج API مستقبل کی ریلیز میں تبدیل ہو سکتا ہے۔ میں 67434 # آپ مزید تفصیلات دیکھ سکتے ہیں اور رائے دے سکتے ہیں۔

لائبریری میں معمولی تبدیلیاں

محفوظ شدہ دستاویزات

آرکائیو/زپ اور آرکائیو/ٹار میں (*Writer.AddFS) کا نفاذ اب خالی ڈائریکٹری کے لیے ڈائریکٹری ہیڈر لکھتا ہے۔

بائٹس

پیکیج بائٹس متعدد افعال جوڑتا ہے جو تکرار کرنے والوں کے ساتھ کام کرتے ہیں:

  • لکیریں بائٹ سلائس میں نئی ​​لائن سے الگ کردہ سٹرنگز پر ایک تکرار کرنے والا لوٹاتا ہے۔
  • SplitSeq ایک بائٹ سلائس کے تمام ذیلی سلائسوں پر ایک ریٹریٹر کو ایک سیپریٹر سے الگ کرتا ہے۔
  • SplitAfterSeq بائٹ سلائس کے ذیلی حصوں پر ایک تکرار کرنے والا لوٹاتا ہے، الگ کرنے والے کے ہر واقعہ کے بعد تقسیم ہوتا ہے۔
  • فیلڈسیک جیسا کہ وضاحت کی گئی ہے، خلائی حروف کی ترتیب کے ارد گرد بائٹ سلائس کے ذیلی حصے پر ایک تکرار کرنے والا لوٹاتا ہے unicode.IsSpace
  • FieldsFuncSeq یونیکوڈ کوڈ پوائنٹس کی ترتیب کے ارد گرد بائٹ سلائس کے ذیلی حصے پر ایک تکرار کرنے والا واپس کرتا ہے جو ایک پیش گوئی کو پورا کرتا ہے۔

crypto/aes

واپسی کی قیمت نیو چیفر NewCTR، NewGCM، NewCBCEncrypter، اور NewCBCDecrypter طریقوں کو مزید نافذ نہیں کرتا ہے۔ یہ طریقے غیر دستاویزی تھے اور تمام فن تعمیر پر دستیاب نہیں تھے۔ اب معنی بلاک مناسب افعال کو براہ راست منتقل کیا جانا چاہئے crypto/cipher. فی الحال، crypto/cipher اب بھی ان طریقوں کو بلاک ویلیوز پر چیک کرتا ہے، حالانکہ وہ معیاری لائبریری کے ذریعے تعاون یافتہ نہیں ہیں۔

crypto/cipher

نئی سہولت NewGCMWithRandomNonce واپسی اے ای اے ڈی، جو AES-GCM کو سیل کے دوران بے ترتیب نونس بنا کر اور اسے سائفر ٹیکسٹ پر پہلے سے لاگو کرتا ہے۔

Реализация ندی، واپس آیا نیو سی ٹی آر کے ساتھ استعمال کیا جاتا ہے جب crypto/aes اب amd64 اور arm64 پر کئی گنا تیز۔

نیو او ایف بی, نیو سی ایف بی اینکریپٹر и نیو سی ایف بی ڈی کریپٹر اب متروک قرار دیے گئے ہیں۔ OFB اور CFB موڈز غیر مستند ہیں، جو عام طور پر فعال حملوں کو سادہ متن میں ہیرا پھیری اور بازیافت کرنے کی اجازت دیتے ہیں۔ ایپلی کیشنز کو استعمال کرنے کی سفارش کی جاتی ہے۔ اے ای اے ڈی بدلے میں اگر غیر تصدیق شدہ موڈ ہے۔ ندی ضروری ہے، استعمال کیا جا سکتا ہے نیو سی ٹی آر بدلے میں

crypto/ecdsa

PrivateKey.Sign کے مطابق اب ایک فیصلہ کن دستخط بناتا ہے۔ آر ایف سی 6979، اگر بے ترتیب ہونے کا ذریعہ صفر ہے۔

crypto/md5

واپسی کی قیمت md5.new، اب انٹرفیس کو بھی لاگو کرتا ہے۔ encoding.binaryappender.

crypto/rand

فنکشن پڑھیں اب کسی ناکامی کی ضمانت نہیں دیتا۔ اگر پڑھتے ہوئے پڑھنے میں غلطی کا سامنا کرنا پڑتا ہے۔ ریڈر، پروگرام مستقل طور پر ختم ہو جائے گا۔ نوٹ کریں کہ ڈیفالٹ ریڈر ہمیشہ کامیابی سے کام کرنے کے لیے دستاویز کیا جاتا ہے، اس لیے یہ تبدیلی صرف ان پروگراموں کو متاثر کرے جو ریڈر متغیر کو اوور رائیڈ کرتے ہیں۔ ایک استثناء 3.17 سے پہلے کے لینکس کرنل ہے، جہاں ڈیفالٹ ریڈر اب بھی /dev/urandom کھولتا ہے اور ناکام ہوسکتا ہے۔

لینکس 6.11 اور بعد میں، ریڈر اب وی ڈی ایس او کے ذریعے گیٹرنڈم سسٹم کال کا استعمال کرتا ہے۔ یہ کئی گنا تیز ہے، عام طور پر چھوٹے پڑھنے کے لیے۔

OpenBSD ریڈر پر اب arc4random_buf(3) استعمال کرتا ہے۔

نئی سہولت متن اب خفیہ طور پر محفوظ بے ترتیب ٹیکسٹ سٹرنگ تیار کر سکتے ہیں۔

crypto/rsa

جنریٹ کی اگر 1024 بٹس سے کم کی کلیدی لمبائی کی درخواست کی جائے تو اب ایک غلطی لوٹاتا ہے۔ تمام سائن، ویریفائی، انکرپٹ، اور ڈکرپٹ طریقے اب ایک خرابی لوٹاتے ہیں اگر کلیدی سائز 1024 بٹس سے کم کے ساتھ استعمال کیا جائے۔ ایسی چابیاں غیر محفوظ ہیں اور استعمال نہیں کی جانی چاہئیں۔ GODEBUG ترتیب دیا جا رہا ہے۔ rsa1024min=0 پرانے رویے کو بحال کرتا ہے، لیکن Go کے ڈویلپرز ایسا کرنے کی تجویز کرتے ہیں جب ضروری ہو اور صرف ٹیسٹوں میں، مثال کے طور پر لائن //go:debug rsa1024min=0 کو ٹیسٹ فائل میں شامل کرکے۔ نیا مثال کے طور پر GenerateKey معیاری 2024 بٹ ٹیسٹ کلید استعمال کرنے میں آسان فراہم کرتا ہے۔

اب کال کرنا زیادہ محفوظ اور موثر ہے۔ PrivateKey.Precompute پر PrivateKey.Validate. جزوی طور پر بھرنے کی موجودگی میں پری کمپیوٹ اب تیز تر ہے۔ Precomputed Values، مثال کے طور پر JSON سے کلید نکالتے وقت۔

پیکج اب مزید غلط کلیدوں کو مسترد کرتا ہے یہاں تک کہ جب Validate کو کال نہیں کیا جاتا ہے، اور جنریٹ کی اب ٹوٹے ہوئے بے ترتیب ذرائع کے لیے نئی غلطیاں واپس کر سکتے ہیں۔ فیلڈز انعامات۔ и پری کمپیوٹیڈ ساخت پرائیویٹ کی اب استعمال کیا جاتا ہے اور اس کی توثیق کی جاتی ہے یہاں تک کہ جب کچھ اقدار غائب ہوں۔ RSA کیز کو پارس کرنے اور نکالنے کے لیے crypto/x509 میں بھی تبدیلیاں ہیں، جن کی ذیل میں وضاحت کی گئی ہے۔

سائن پی کے سی ایس 1 وی 15 и PKCS1v15 کی تصدیق کریں۔ اب SHA-512/224، SHA-512/256 اور SHA-3 کو سپورٹ کریں۔

جنریٹ کی اب پرائیویٹ ایکسپوننٹ (اولر فنکشن کی بجائے کارمائیکل فنکشن) پیدا کرنے کے لیے تھوڑا سا مختلف طریقہ استعمال کرتا ہے۔ نایاب ایپلی کیشنز جو بیرونی طور پر صرف بنیادی نمبروں سے کلیدوں کو دوبارہ تخلیق کرتی ہیں مختلف لیکن ہم آہنگ نتائج پیدا کر سکتی ہیں۔

پبلک اور پرائیویٹ کیز پر آپریشنز اب wasm پر دو گنا تیز ہیں۔

crypto/sha*

کرپٹو/ لطیف

نئی سہولت ڈیٹا انڈیپنڈنٹ ٹائمنگ کے ساتھ صارف کو فن تعمیر کی مخصوص خصوصیات کے ساتھ ایک فنکشن کو انجام دینے کی اجازت دیتا ہے جو اس بات کو یقینی بناتا ہے کہ ڈیٹا ویلیو کے وقت کی نسبت کچھ ہدایات کو تبدیل نہیں کیا گیا ہے۔ اس کا استعمال اس بات کو یقینی بنانے کے لیے کیا جا سکتا ہے کہ مستقل وقت میں چلنے کے لیے لکھے گئے کوڈ کو پروسیسر کی سطح کے فنکشنز کے ذریعے بہتر نہیں کیا گیا ہے تاکہ یہ متغیر وقت میں چل سکے۔ فی الحال WithDataIndependentTiming arm64 پر PSTATE.DIT بٹ استعمال کرتا ہے اور دیگر تمام فن تعمیرات پر کچھ نہیں کرتا ہے۔ GODEBUG ترتیب دیا جا رہا ہے۔ dataindependenttiming=1 پورے گو پروگرام کے لیے DIT موڈ کو فعال کرتا ہے۔

آؤٹ پٹ XORBytes ان پٹ کے ساتھ مکمل طور پر اوورلیپ ہونا چاہیے یا بالکل نہیں۔ پہلے رویے کی دوسری صورت میں وضاحت نہیں کی گئی تھی، جبکہ اب XORBytes گھبرا جائیں گے۔

crypto/tls

TLS سرور اب انکرپٹڈ کلائنٹ ہیلو (ECH) کو سپورٹ کرتا ہے۔ اس فیچر کو فیلڈ میں بھر کر فعال کیا جا سکتا ہے۔ Config.EncryptedClientHelloKeys.

ایک نیا پوسٹ کوانٹم کلیدی تبادلہ میکانزم X25519MLKEM768 اب تائید شدہ اور بطور ڈیفالٹ فعال ہے جب Config.CurvePreferences صفر ہے GODEBUG ترتیب دیا جا رہا ہے۔ tlsmlkem=0 ڈیفالٹ واپس کرتا ہے۔

تجرباتی X25519Kyber768Draft00 کلیدی تبادلے کے لیے سپورٹ کو ہٹا دیا گیا ہے۔

کلیدی تبادلہ آرڈر اب مکمل طور پر کرپٹو/ٹی ایل ایس پیکج کے ذریعے سنبھالا جاتا ہے۔ آرڈر Config.CurvePreferences اب نظر انداز کر دیا گیا ہے اور مواد کو صرف اس بات کا تعین کرنے کے لیے استعمال کیا جاتا ہے کہ فیلڈ کو بھرنے پر کون سے کلیدی تبادلے شامل کیے جائیں۔

نیا میدان ClientHelloInfo.Extensions کلائنٹ ہیلو پیغام میں موصول ہونے والے ایکسٹینشن شناخت کنندگان کی فہرست درج کرتا ہے۔ یہ فنگر پرنٹنگ TLS کلائنٹس کے لیے مفید ہو سکتا ہے۔

crypto/x509

GODEBUG ترتیب دیا جا رہا ہے۔ x509sha1 کو ہٹا دیا گیا ہے۔ تصدیق۔ تصدیق کریں۔ SHA-1 پر مبنی دستخطوں کو مزید سپورٹ نہیں کرتا ہے۔

او آئی ڈی اب انٹرفیس کو لاگو کرتا ہے۔ encoding.binaryappender и encoding.TextAppender.

ڈیفالٹ سرٹیفکیٹ پالیسی فیلڈ سے تبدیل کر دیا گیا ہے سرٹیفکیٹ۔پالیسی شناخت کنندگان پر سرٹیفکیٹ۔ پالیسیاں. سرٹیفکیٹس کو پارس کرتے وقت، دونوں فیلڈز پاپولڈ ہوں گے، لیکن سرٹیفکیٹ پالیسی بناتے وقت، وہ Certificate.PolicyIdentifiers کے بجائے Certificate.Policies فیلڈ سے لیے جائیں گے۔ اس تبدیلی کو واپس کیا جا سکتا ہے۔ GODEBUG سیٹ اپ x509usepolicies=0۔

سرٹیفکیٹ بنائیں اب ٹیمپلیٹ فیلڈ کو پاس کرتے وقت RFC 5280 کے مطابق طریقہ استعمال کرتے ہوئے ایک سیریل نمبر تیار کرے گا سرٹیفکیٹ۔سیریل نمبر صفر، کریش ہونے کے بجائے۔

سرٹیفکیٹ۔ تصدیق کریں۔ اب پالیسی کی توثیق کی حمایت کرتا ہے جیسا کہ RFC 5280 اور RFC 9618 میں بیان کیا گیا ہے۔ نیا فیلڈ VerifyOptions.CertificatePolicies پالیسیوں کے قابل قبول سیٹ پر سیٹ کیا جا سکتا ہے۔ OIDs. صرف درست پالیسی گراف کے ساتھ سرٹیفکیٹ چینز واپس کیے جائیں گے۔ سرٹیفکیٹ۔ تصدیق کریں۔.

مارشل پی کے سی ایس 8 پرائیویٹ کلید اب ایک غلط RSA کلید کو بازیافت کرنے کے بجائے ایک غلطی لوٹاتا ہے۔ (مارشل پی کے سی ایس 1 پرائیویٹ کلید اس میں کوئی غلطی کی واپسی نہیں ہے اور جب غلط کلیدیں فراہم کی جاتی ہیں تو اس کا برتاؤ غیر متعینہ رہتا ہے۔)

PKCS1PrivateKey کو پارس کریں۔ и PKCS8PrivateKey کو پارس کریں۔ اب انکوڈ شدہ CRT اقدار کا استعمال اور توثیق کریں، لہذا غلط RSA کلیدوں کو مسترد کر سکتے ہیں جو پہلے قبول کی گئی تھیں۔ استعمال GODEBUG ترتیبات x509rsacrt=0 CRT قدروں کی دوبارہ گنتی کی طرف لوٹتا ہے۔

ڈیبگ/یلف

پیکیج ڈیبگ/یلف متحرک ELF (ایگزیکیوٹیبل اور لنک ایبل فارمیٹ) فائلوں میں علامت کے ورژن کو سنبھالنے کے لیے تعاون شامل کرتا ہے۔ نیا طریقہ File.DynamicVersions ELF فائل میں متعین متحرک ورژنز کی فہرست لوٹاتا ہے۔ نیا طریقہ File.DynamicVersionNeeds اس ELF فائل کے لیے مطلوبہ ڈائنامک ورژنز کی فہرست لوٹاتا ہے جو دیگر ELF اشیاء میں بیان کیے گئے ہیں۔ آخر میں، نئے فیلڈز Symbol.HasVersion и Symbol.VersionIndex علامت کے ورژن کی نشاندہی کریں۔

انکوڈنگ

دو نئے انٹرفیس ٹیکسٹ اپینڈر и بائنری اپینڈر بائٹ سلائس میں کسی شے کی متن یا بائنری نمائندگی شامل کرنے کے لیے متعارف کرایا گیا تھا۔ یہ انٹرفیس اسی طرح کی فعالیت فراہم کرتے ہیں۔ TextMarshaler и BinaryMarshaler، لیکن ہر بار ایک نیا سلائس مختص کرنے کے بجائے، وہ ڈیٹا کو براہ راست موجودہ سلائس میں شامل کرتے ہیں۔ یہ انٹرفیس فی الحال معیاری لائبریری کی اقسام کے ذریعہ لاگو کیے گئے ہیں جو پہلے سے ہی TextMarshaler اور/یا BinaryMarshaler کو نافذ کرتے ہیں۔

انکوڈنگ/json

تعمیر کرتے وقت، سٹرکچر فیلڈ ٹیگ میں نئے omitzero آپشن کے ساتھ ایک سٹرکچر فیلڈ کو چھوڑ دیا جائے گا اگر اس کی ویلیو صفر ہے۔ اگر فیلڈ کی قسم میں IsZero() bool طریقہ ہے، تو اس کا استعمال اس بات کا تعین کرنے کے لیے کیا جائے گا کہ آیا قدر صفر ہے۔ بصورت دیگر اس کی قدر صفر ہو جائے گی۔ اس کی قسم کے لیے null قدر. omitzero فیلڈ ٹیگ omitempty کے مقابلے میں صاف اور کم غلطی کا شکار ہوتا ہے جب ارادہ null اقدار کو چھوڑنا ہو۔ خاص طور پر، omitempty کے برعکس، omitzero صفر کو چھوڑ دیتا ہے۔ وقت.وقت اقدار، جو مسائل کا ایک عام ذریعہ ہے۔

اگر omitempty اور omitzero دونوں متعین ہیں، اگر قدر خالی یا صفر (یا دونوں) ہو تو فیلڈ کو چھوڑ دیا جائے گا۔

UnmarshalTypeError.Field اب مزید تفصیلی خرابی کے پیغامات فراہم کرنے کے لیے بلٹ ان ڈھانچے شامل ہیں۔

go/types

تمام go/types ڈیٹا ڈھانچے جو طریقہ کار کے جوڑوں کی ترتیب کو بے نقاب کرتے ہیں، جیسے Len() int اور At(int) T، اب ایسے طریقے بھی ہیں جو تکرار کرنے والوں کو واپس کرتے ہیں، اس طرح کے آسان کوڈ کی اجازت دیتے ہیں:

params := fn.Type.(*types.Signature).Params() for i :=0; i < params.Len(); i++ { use(params.At(i)) }

اس پر:

param کے لیے := رینج fn.Signature().Params().variables() { use(param) }

طریقے: انٹرفیس۔ ایمبیڈڈ ٹائپس انٹرفیس۔ واضح طریقے انٹرفیس۔طریقے۔ MethodSet.Methods نام دیا گیا طریقہ دائرہ کار۔بچوں ڈھانچہ۔ فیلڈز Tuple.variables TypeList.Types TypeParamList.TypeParams یونین. شرائط

ہیش/*

لاگ/سلاگ

نئی ڈسکارڈ ہینڈلر ایک ہینڈلر ہے جو کبھی فعال نہیں ہوتا ہے اور ہمیشہ اس کے آؤٹ پٹ کو ضائع کر دیتا ہے۔

سطح и لیول وار اب انٹرفیس کو لاگو کریں۔ encoding.TextAppender.

ریاضی/*

خالص

سننے کونڈگ اب ایم پی ٹی سی پی کو ڈیفالٹ سسٹم پر استعمال کرتا ہے جہاں یہ سپورٹ کیا جاتا ہے (فی الحال صرف لینکس)۔

IP اب انٹرفیس کو لاگو کرتا ہے۔ encoding.TextAppender.

net/http

پابندی بدل گئی ہے۔ نقل و حمل درخواست کے جواب میں موصول ہونے والے 1xx معلوماتی جوابات پر۔ پہلے یہ درخواست کو روک دے گا اور 5 1xx سے زیادہ جوابات موصول ہونے کے بعد ایک غلطی واپس کر دے گا۔ اب یہ صرف ایک غلطی واپس کرتا ہے اگر تمام 1xx جوابات کا کل سائز کنفیگریشن سیٹنگ سے زیادہ ہو۔ Transport.MaxResponseHeaderBytes.

اس کے علاوہ، جب درخواست میں ٹریکنگ ہک ہوتا ہے۔ net/http/httptrace.ClientTrace.Got1xxResponse، اب جوابات کی کل تعداد 1xx پر کوئی حد نہیں ہے۔ Got1xxResponse ہک درخواست کو روکنے کے لیے ایک غلطی واپس کر سکتا ہے۔

نقل و حمل и سرور اب ایک HTTP2 فیلڈ ہے جو HTTP/2 پروٹوکول کی ترتیبات کی تشکیل کی اجازت دیتا ہے۔

نئے فیلڈز سرور۔پروٹوکول и ٹرانسپورٹ پروٹوکول کنفیگر کرنے کا ایک آسان طریقہ فراہم کریں کہ سرور یا کلائنٹ کون سا HTTP پروٹوکول استعمال کرتا ہے۔

سرور اور کلائنٹ کو غیر خفیہ کردہ HTTP/2 کنکشنز کو سپورٹ کرنے کے لیے کنفیگر کیا جا سکتا ہے۔

جب سرور۔پروٹوکول UnencrypterHTTP2 پر مشتمل ہے، سرور غیر خفیہ کردہ بندرگاہوں پر HTTP/2 کنکشن قبول کرے گا۔ سرور ایک ہی پورٹ پر HTTP/1 اور غیر خفیہ کردہ HTTP/2 دونوں کو قبول کر سکتا ہے۔

جب ٹرانسپورٹ پروٹوکول UnencryptedHTTP2 پر مشتمل ہے اور HTTP1 پر مشتمل نہیں ہے، ٹرانسپورٹ پتوں کے لیے غیر مرموز HTTP/2 استعمال کرے گی۔ http://. اگر کسی ٹرانسپورٹ کو HTTP/1 اور غیر خفیہ کردہ HTTP/2 دونوں استعمال کرنے کے لیے ترتیب دیا گیا ہے، تو یہ HTTP/1 استعمال کرے گا۔

غیر خفیہ کردہ HTTP/2 کے لیے سپورٹ "فارورڈ لرننگ کے ساتھ HTTP/2" (RFC 9113، سیکشن 3.3) کا استعمال کرتا ہے۔ فرسودہ ہیڈر "اپ گریڈ: h2c" تعاون یافتہ نہیں ہے۔

net/netip

Addr, AddrPort и اپسرگ اب انٹرفیس کو لاگو کریں۔ encoding.binaryappender и encoding.TextAppender.

نیٹ/یو آر ایل

URL اب انٹرفیس کو بھی لاگو کرتا ہے۔ encoding.binaryappender.

os/صارف

ونڈوز پر موجودہ اب ونڈوز نینو سرور میں استعمال کیا جا سکتا ہے۔ NetApi32 لائبریری کے فنکشنز کو استعمال کرنے سے بچنے کے لیے نفاذ کو اپ ڈیٹ کر دیا گیا ہے، جو نینو سرور سے غائب ہے۔

ونڈوز پر موجودہ, اوپر دیکھو и LookupId اب درج ذیل بلٹ ان یوزر سروس اکاؤنٹس کو سپورٹ کرتا ہے:

  • NT اتھارٹی سسٹم
  • این ٹی اتھارٹی لوکل سروس
  • NT اتھارٹی نیٹ ورک سروس

ونڈوز پر موجودہ اس وقت نمایاں طور پر تیز ہوا جب موجودہ صارف کو ایک سست ڈومین میں شامل کیا گیا، جو کہ بہت سے کارپوریٹ صارفین کے لیے ایک عام معاملہ ہے۔ نئے نفاذ کی کارکردگی اب ملی سیکنڈز کی ترتیب میں ہے، پچھلے نفاذ کے مقابلے، جسے مکمل ہونے میں کئی سیکنڈ، حتیٰ کہ منٹ لگ سکتے ہیں۔

ونڈوز پر موجودہ جب موجودہ تھریڈ کسی دوسرے صارف کی نقالی کر رہا ہو تو اب عمل کے مالک صارف کو واپس کرتا ہے۔ پہلے یہ ایک خرابی واپس کرتا تھا۔

regexp

Regexp اب انٹرفیس کو لاگو کرتا ہے۔ encoding.TextAdapter.

رن ٹائم

فنکشن جوروٹ اب فرسودہ ہے۔ نئے ماحول میں، آپ کو "گو" بائنری کا تعین کرنے کے لیے سسٹم کا راستہ استعمال کرنے کو ترجیح دینی چاہیے، اور GOROOT کا تعین کرنے کے لیے go env GOROOT استعمال کرنا چاہیے۔

ڈور

پیکیج ڈور تکرار کرنے والوں کے ساتھ کام کرنے کے لئے کئی افعال شامل کرتا ہے:

  • لکیریں سٹرنگ میں نئی ​​لائن سے الگ ہونے والی لائنوں پر ایک تکرار کرنے والا لوٹاتا ہے۔
  • SplitSeq ایک سٹرنگ کے تمام ذیلی اسٹرنگز پر ایک ریٹریٹر کو ایک سیپریٹر سے الگ کرتا ہے۔
  • SplitAfterSeq سٹرنگ کے ذیلی اسٹرنگز پر ایک تکرار کرنے والا لوٹاتا ہے، الگ کرنے والے کے ہر واقعہ کے بعد تقسیم ہوتا ہے۔
  • فیلڈسیک وائٹ اسپیس حروف کی ترتیب کے ارد گرد سٹرنگ کے ذیلی سٹرنگز پر ایک تکرار کرنے والا واپس کرتا ہے، جیسا کہ وضاحت کی گئی ہےunicode.IsSpace
  • FieldsFuncSeq یونیکوڈ کوڈ پوائنٹس کی ترتیب کے ارد گرد سٹرنگ کے ذیلی اسٹرنگز پر ایک تکرار کرنے والا لوٹاتا ہے جو ایک پیش گوئی کو پورا کرتا ہے۔

مطابقت پذیر

Реализация sync.map کارکردگی کو بہتر بنانے کے لیے تبدیل کیا گیا ہے، خاص طور پر لغت کی تبدیلیوں کے لیے۔ مثال کے طور پر، بڑی لغتوں پر اختلافی سیٹ تبدیلی کا تنازعہ کم ہوتا ہے، اور کم تنازعہ لغت کا بوجھ حاصل کرنے کے لیے اسے مزید وقت کی ضرورت نہیں ہوتی ہے۔

اگر آپ کو کسی قسم کی پریشانی کا سامنا کرنا پڑتا ہے تو، GOEXPERIMENT=nosynchashtriemap کو تعمیر کے دوران پرانے نفاذ پر واپس لوٹنے کے لیے سیٹ کریں اور براہ کرم مسئلہ فارم بھریں.

ٹیسٹنگ

نئے طریقے T.Context и B.Context ایک سیاق و سباق واپس کریں جو ٹیسٹ مکمل ہونے کے بعد اور ٹیسٹ کلین اپ فنکشنز کے مکمل ہونے سے پہلے ضائع کر دیا جاتا ہے۔

نئے طریقے T.Chdir и B.Chdir ٹیسٹ یا بینچ مارک کی مدت کے لیے ورکنگ ڈائرکٹری کو تبدیل کرنے کے لیے استعمال کیا جا سکتا ہے۔

متن/ٹیمپلیٹ

ٹیمپلیٹس اب range-over-func اور range-over-int کو سپورٹ کرتے ہیں۔

وقت

وقت اب انٹرفیس کو لاگو کرتا ہے۔ encoding.binaryappender и encoding.TextAppender.

پورٹس

لینکس

جیسا کہ تھا اعلان کیا گو 1.23 ریلیز نوٹ کے مطابق، گو 1.24 کو لینکس کرنل ورژن 3.2 یا اس کے بعد کی ضرورت ہے۔

ڈارون

Go 1.24 آخری ریلیز ہے جو macOS 11 Big Sur پر چلے گی۔ Go 1.25 کو macOS 12 Monterey یا اس کے بعد کی ضرورت ہوگی۔

ویب ایسوسی ایشن

Go:wasmexport کمپائلر ڈائریکٹیو کو Go پروگراموں میں شامل کر دیا گیا ہے تاکہ WebAssembly ہوسٹ کو فنکشن ایکسپورٹ کیا جا سکے۔

WebAssembly سسٹم انٹرفیس پیش نظارہ 1 (GOOS=wasip1 GOARCH=wasm) میں، Go 1.24 Go پروگرام بنانے کی حمایت کرتا ہے جیسا کہ ری ایکٹر/لائبریری بلڈ فلیگ -buildmode=c-shared کی وضاحت کرکے۔

go:wasmimport فنکشنز کے لیے اب دلیل یا نتیجہ کی اقسام کے طور پر مزید اقسام کی اجازت ہے۔ خاص طور پر، bool، string، uintptr اور مخصوص اقسام کی طرف اشارہ کرنے کی اجازت ہے (تفصیلات دیکھیں دستاویزات)، 32 بٹ اور 64 بٹ انٹیجر اور فلوٹنگ پوائنٹ کی اقسام کے ساتھ، اور غیر محفوظ پوائنٹر، جن کی پہلے سے اجازت ہے۔ ان اقسام کو go:wasmexport فنکشنز کے لیے دلیل یا نتیجہ کی اقسام کے طور پر بھی اجازت ہے۔

WebAssembly کے لیے سپورٹ فائلوں کو misc/wasm سے lib/wasm میں منتقل کر دیا گیا ہے۔

ابتدائی میموری فوٹ پرنٹ نمایاں طور پر کم ہو گیا ہے، خاص طور پر چھوٹے WebAssembly ایپلی کیشنز کے لیے۔

ونڈوز

32 بٹ ونڈوز/آرم پورٹ (GOOS=windows GOARCH=arm) کو ٹوٹا ہوا نشان زد کیا گیا ہے۔ تفصیلات میں 70705 #

ماخذ: linux.org.ru

DDoS تحفظ، VPS VDS سرورز والی سائٹوں کے لیے قابل اعتماد ہوسٹنگ خریدیں۔ DDoS تحفظ، VPS VDS سرورز کے ساتھ قابل اعتماد ویب سائٹ ہوسٹنگ خریدیں۔ ProHoster