الذهاب شنومكس

الذهاب شنومكس

يأتي إصدار جديد من لغة Go، الإصدار 1.24، بعد ستة أشهر الذهاب شنومكس. معظم التغييرات تتعلق بتنفيذ سلسلة الأدوات ووقت التشغيل والمكتبات. كما هو الحال دائمًا، يوفر الإصدار وعد التوافق 1. يتوقع مصممو اللغة أن تستمر جميع برامج Go تقريبًا في التجميع والتشغيل كما في السابق.

تغيرات اللغة

يدعم الآن الإصدار 1.24 بشكل كامل أسماء مستعارة للأنواع العامة:يمكن تحديد معلمة اسم بديل للنوع كنوع معلن. التفاصيل في مواصفات اللغة. في الوقت الحالي، يمكن تعطيل هذه الميزة عن طريق تعيين GOEXPERIMENT=noaliastypeparams؛ ومع ذلك، سيتم إزالة خيار aliastypeparams في Go 1.25.

أدوات

أمر الذهاب

يمكن الآن لوحدات Go تتبع التبعيات القابلة للتنفيذ باستخدام توجيه الأداة في go.mod. يؤدي هذا إلى إزالة الحاجة إلى الحل البديل السابق المتمثل في إضافة الأدوات كواردات فارغة في ملف يسمى عادةً "tools.go". يمكن لأمر أداة Go الآن تشغيل هذه الأدوات بالإضافة إلى الأدوات التي تأتي مع Go. يمكن العثور على مزيد من المعلومات على توثيق.

يؤدي العلم -tool الجديد لـ go get إلى إضافة توجيهات الأداة إلى الوحدة النمطية الحالية للحزم المحددة بالإضافة إلى إضافة توجيهات require.

جديد أداة النمط الوصفي يشير إلى جميع الأدوات الموجودة في الوحدة الحالية. يمكن استخدام هذا لتحديثها جميعًا عبر أداة go get، أو لتثبيتها في دليل GOBIN الخاص بك عبر أداة go install.

يتم الآن تخزين الملفات القابلة للتنفيذ التي تم إنشاؤها عبر تشغيل go وسلوك أداة go الجديدة في ذاكرة التخزين المؤقت لبناء Go. يؤدي هذا إلى إمكانية تكرار عمليات الإطلاق بسبب ذاكرة التخزين المؤقت المتزايدة. #69290.

تقبل أوامر go build وgo install الآن علامة -json، التي تقوم بالإبلاغ عن مخرجات البناء والأخطاء كمخرجات JSON منظمة على المخرجات القياسية. يمكن رؤية تفاصيل التنسيق في go help buildjson.

علاوة على ذلك، يقوم go test -json الآن بالإبلاغ عن أخطاء الإخراج والبناء في JSON، مختلطة بنتيجة الاختبار JSON. يمكن تمييزها من خلال أنواع الإجراءات الجديدة، ولكن إذا تسببت في حدوث مشكلات في نظام تكامل الاختبار، فيمكنك الرجوع إلى إخراج النص الخاص بالبناء عبر إعداد GODEBUG gotestjsonbuildtext=1.

يوفر متغير بيئة GOAUTH الجديد طريقة مرنة لترخيص عمليات سحب الوحدات النمطية الخاصة. يمكنك رؤية التفاصيل في مساعدة goauth.

تم الآن تثبيت أمر go build نسخة من الوحدة الرئيسية في الثنائي المجمّع، استنادًا إلى علامة و/أو التزام التحكم في الإصدار. سيتم إضافة اللاحقة +dirty إذا كانت هناك تغييرات غير ملتزمة. يمكن استخدام العلم -buildvcs=false لحذف معلومات التحكم في الإصدار من الملف الثنائي.

جديد إعداد GODEBUG أداة تتبع السلسلة=1 يمكن الآن استخدامه لتتبع عملية اختيار سلسلة الأدوات في الأمر go.

الرئيس التنفيذي

يدعم Cgo التعليقات التوضيحية الجديدة لوظائف C لتحسين أداء وقت التشغيل. #cgo noescape يخبر cFunctionName المترجم أن الذاكرة التي تم تمريرها إلى وظيفة C cFunctionName لم يتم الهروب منها. #cgo nocallback يخبر cFunctionName المترجم أن وظيفة C cFunctionName لا تستدعي أي وظائف Go. يمكن العثور على مزيد من المعلومات على توثيق cgo.

يرفض Cgo حاليًا تجميع المكالمات إلى وظيفة C تحتوي على إعلانات متعددة غير متوافقة. على سبيل المثال، إذا تم إعلان f على أنها void f(int) وvoid f(double)، فسوف يقوم cgo بالإبلاغ عن خطأ بدلاً من إنشاء تسلسل استدعاء غير صالح f(0). الجديد في هذا الإصدار هو تحسين القدرة على اكتشاف حالة الخطأ هذه عندما تظهر إعلانات غير متوافقة في ملفات مختلفة. #67699.

أوبجدمب

تدعم أداة objdump الآن التفكيك على LoongArch 64 بت (GOARCH=loong64)، وRISC-V (GOARCH=riscv64)، وS390X (GOARCH=s390x).

طب بيطري

يقوم محلل الاختبارات الجديد بالإبلاغ عن الأخطاء الشائعة في إعلانات الاختبار والاختبار المربك والمعيار والأمثلة في مجموعات الاختبار، مثل الأسماء المشوهة أو التوقيعات غير الصالحة أو الأمثلة التي توثق معرفات غير موجودة. قد تؤدي بعض هذه الأخطاء إلى فشل الاختبارات.

يقوم محلل printf الحالي الآن بالإبلاغ عن التشخيصات لمكالمات النموذج fmt.Printf(s)، حيث s عبارة عن سلسلة تنسيق غير ثابتة بدون أي وسيطات أخرى. تعتبر مثل هذه الدعوات خطأً دائمًا تقريبًا، نظرًا لأن قيمة s قد تحتوي على حرف %؛ استخدم fmt.Print بدلا من ذلك. 60529. يميل هذا الفحص إلى العثور على أشياء في الكود الموجود، وبالتالي يتم تطبيقه فقط عندما يكون إصدار اللغة (كما هو محدد بواسطة التوجيه go لملف go.mod أو التعليقات `//go:build`) هو Go 1.24 على الأقل، لتجنب التسبب في انقطاعات تكامل طويلة عند الترقية إلى سلسلة أدوات Go 1.24.

يقوم محلل علامة البناء الحالي الآن بالإبلاغ عن التشخيصات عندما يكون هناك علامة بناء غير صحيحة قيود بناء الإصدار الأقدم انتقل إلى التوجيه //go:build. على سبيل المثال، //go:build go1.23.1 يشير إلى إصدار نقطة؛ استخدم بدلا من ذلك //go:build go1.23. #64127.

يقوم محلل copylock الحالي الآن بالإبلاغ عن التشخيص عندما يتم إعلان متغير في حلقة "for" ثلاثية، مثل for i := iter(); تم(أنا); i = next(i) { … }، يحتوي على sync.Locker، مثل sync.Mutex. الذهاب شنومكس تم تغيير سلوك هذه الحلقات لإنشاء متغير جديد لكل تكرار، ونسخ القيم من التكرار السابق؛ هذه النسخة غير آمنة للأقفال. #66387.

جوكاشيبروج

يمكن الآن تنفيذ آلية التخزين المؤقت للاختبار والثنائي الداخلي cmd/go بواسطة العمليات الفرعية التي تنفذ بروتوكول JSON بين أداة cmd/go والعملية الفرعية المسماة بواسطة متغير بيئة GOCACHEPROG. في السابق كان مخصصًا لـ GOEXPERIMENT. يمكن رؤية تفاصيل البروتوكول في توثيق.

وقت الانتهاء

أدى العديد من تحسينات الأداء وقت التشغيل إلى تقليل تكلفة وحدة المعالجة المركزية بنسبة 2-3% في المتوسط ​​عبر مجموعة من معايير القياس التمثيلية. قد تختلف النتائج حسب التطبيق. تتضمن هذه التحسينات تنفيذ خريطة مدمجة جديدة تعتمد على طاولات سويدية، تخصيص أكثر كفاءة لذاكرة الكائنات الصغيرة، وتنفيذ وقت تشغيل داخلي جديد للمتكس.

يمكن تعطيل تنفيذ الخريطة المضمنة الجديدة ومزامنة وقت التشغيل الداخلية الجديدة عن طريق تعيين GOEXPERIMENT=noswissmap وGOEXPERIMENT=nospinbitmutex في وقت البناء، على التوالي.

مترجم

لقد حظر المترجم بالفعل تعريف طرق جديدة بأنواع المستقبلات التي تم إنشاؤها بواسطة cgo، ولكن كان من الممكن تجاوز هذا القيد عبر اسم مستعار للنوع. يقوم Go 1.24 الآن دائمًا بالإبلاغ عن خطأ إذا أشار المستقبل إلى نوع تم إنشاؤه بواسطة cgo، إما بشكل مباشر أو غير مباشر (عبر اسم بديل للنوع).

رابط

يقوم الرابط الآن بإنشاء معرف بناء GNU (إدخال ELF NT_GNU_BUILD_ID) على منصات ELF وUUID (أمر تحميل Mach-O LC_UUID) على macOS بشكل افتراضي. يتم اشتقاق معرف البناء أو UUID من معرف بناء Go. يمكن إيقاف تشغيل ذلك باستخدام علامة الرابط -B none، أو تجاوزها باستخدام علامة الرابط -B 0xNNNN بقيمة سداسية عشرية محددة من قبل المستخدم.

ترقية

كما جاء في ملاحظات إصدار Go 1.22يتطلب الآن Go 1.24 تثبيت Go 1.22.6 أو إصدار أحدث. يتوقع المطورون أن Go 1.26 سوف يتطلب إصدارًا نقطيًا لـ Go 1.24 أو إصدارًا أحدث.

المكتبة القياسية

الوصول إلى نظام الملفات المقيد بالدليل

نوع جديد os.root توفر القدرة على إجراء عمليات نظام الملفات داخل دليل محدد.

وظيفة نظام التشغيل OpenRoot يفتح الدليل ويعود os.root. طرق حول os.root العمل في هذا الدليل وعدم السماح للمسارات بالإشارة إلى مواقع خارج الدليل، بما في ذلك تلك التي تتبع الروابط الرمزية خارج الدليل. تعكس الطرق الموجودة في os.Root معظم عمليات نظام الملفات المتوفرة في حزمة os، بما في ذلك، على سبيل المثال، os.Root.فتح, os.Root.إنشاء, os.Root.Mkdir и نظام التشغيل.الجذر.الإحصائيات.

ميزة معيارية جديدة

يمكن الآن للمعايير استخدام طريقة أسرع وأقل عرضة للخطأ اختبار.B.Loop للتكرار على معيار مثل b.Loop() { … } بدلاً من هياكل الحلقة النموذجية التي تتضمن bN مثل range bN وهذا يوفر ميزتين مهمتين:

  • يتم تنفيذ وظيفة المعيار مرة واحدة فقط لكل عدد، وبالتالي يتم تنفيذ خطوات الإعداد والتنظيف المكلفة مرة واحدة فقط.
  • تظل معلمات استدعاء الوظيفة ونتائجها موجودة، مما يمنع المترجم من تحسين نص الحلقة بالكامل.

تحسين النهائيات

ميزة جديدة وقت التشغيل.إضافة التنظيف هي آلية إكمال أكثر مرونة وأكثر كفاءة وأقل عرضة للخطأ من وقت التشغيل.SetFinalizer. تقوم AddCleanup بربط وظيفة التنظيف بالكائن والتي سيتم تشغيلها بمجرد أن يصبح الكائن غير متاح. ومع ذلك، على عكس SetFinalizer، يمكن إرفاق عمليات تنظيف متعددة بكائن واحد، ويمكن إرفاق عمليات التنظيف بمؤشرات داخلية، ولا تتسبب عمليات التنظيف عادةً في حدوث تسريبات عندما تشكل الكائنات دورة، ولا تؤخر عمليات التنظيف إلغاء تخصيص الكائن أو الكائنات التي يشير إليها. ينبغي أن يفضل الكود الجديد AddCleanup على SetFinalizer.

حزمة ضعيفة جديدة

حزمة جديدة ضعيف يقدم مؤشرات ضعيفة.

المؤشرات الضعيفة هي بدائية منخفضة المستوى تُستخدم لإنشاء هياكل فعالة للذاكرة مثل القواميس الضعيفة لتعيين القيم، وقواميس التوحيد لأي شيء غير مغطى بواسطة الحزمة. فريد من نوعه، وأنواع مختلفة من مخابئ. لدعم حالات الاستخدام هذه، يوفر هذا الإصدار أيضًا وقت التشغيل.إضافة التنظيف и maphash.قابلة للمقارنة.

حزمة crypto/mlkem الجديدة

حزمة جديدة كريبتو/ملكيم ينفذ ML-KEM-768 وML-KEM-1024.

ML-KEM هي آلية تبادل مفاتيح ما بعد الكم، والمعروفة سابقًا باسم Kyber والمحددة في فيبس 203.

الحزم الجديدة crypto/hkdf وcrypto/pbkdf2 وcrypto/sha3

حزمة جديدة التشفير/hkdf ينفذ وظيفة اشتقاق المفتاح "الاستخراج والتوسيع" المستندة إلى HMAC HKDF كما هو محدد في RFC 5869.

حزمة جديدة تشفير/pbkdf2 ينفذ وظيفة اشتقاق المفتاح المستندة إلى كلمة المرور PBKDF2 كما هو محدد في RFC 8018.

حزمة جديدة التشفير/sha3 ينفذ دالة التجزئة SHA-3 ووظائف الإخراج القابلة للتوسيع SHAKE وcSHAKE كما هو محدد في فيبس 202.

تعتمد الحزم الثلاث على حزم golang.org/x/crypto/… الموجودة.

الامتثال لمعايير FIPS 140-3

يتضمن هذا الإصدار مجموعة جديدة من الآليات لضمان الامتثال لمعايير FIPS 140-3.

وحدة تشفير Go عبارة عن مجموعة من حزم المكتبة القياسية الداخلية التي يتم استخدامها بشكل شفاف لتنفيذ خوارزميات FIPS 140-3 المعتمدة. لا تتطلب التطبيقات إجراء أي تغييرات لاستخدام وحدة التشفير Go للخوارزميات المعتمدة.

يمكن استخدام متغير البيئة الجديد GOFIPS140 لتحديد إصدار وحدة تشفير Go لاستخدامها في عملية البناء. جديد إعداد GODEBUG يمكن استخدام fips140 لتمكين وضع FIPS 140-3 في وقت التشغيل.

يتضمن Go 1.24 وحدة تشفير Go v1.0.0، والتي يتم اختبارها حاليًا في مختبر معتمد من CMVP.

حزمة تجريبية جديدة للاختبار/المزامنة

حزمة تجريبية جديدة اختبار/اختبار المزامنة يوفر الدعم لاختبار الكود المتزامن.

  • وظيفة تشغيل synctest يقوم بتشغيل مجموعة من الروتينات في "فقاعة" معزولة. في فقاعة وظيفة الحزمة الوقت العمل على الساعات الخاطئة.
  • وظائف اختبار المزامنة.انتظر انتظر حتى يتم حظر جميع الروتينات في الفقاعة الحالية.

يمكن العثور على التفاصيل في وثائق الحزمة.

حزمة synctest تجريبية ويجب تمكينها عن طريق تعيين GOEXPERIMENT=synctest. قد تتغير واجهة برمجة التطبيقات الخاصة بالحزمة في الإصدارات المستقبلية. في #67434 يمكنك رؤية المزيد من التفاصيل وتقديم التعليقات.

تغييرات طفيفة في المكتبة

أرشيف

تكتب الآن تنفيذات (*Writer.AddFS) في archive/zip و archive/tar رأس الدليل لدليل فارغ.

بايت

صفقة بايت يضيف العديد من الوظائف التي تعمل مع المتكررات:

  • خطوط يقوم بإرجاع متكرر على سلاسل مفصولة بسطر جديد في شريحة بايت.
  • تقسيم التسلسل يقوم بإرجاع متكرر على جميع الشرائح الفرعية لشريحة البايت المفصولة بفاصل.
  • تقسيم بعد التسلسل يقوم بإرجاع متكرر على الشرائح الفرعية لشريحة البايت، مقسمًا بعد كل ظهور للفاصل.
  • تسلسل الحقول يعيد متكررًا على شرائح فرعية من شريحة بايت حول تسلسلات من أحرف المسافة، كما هو محدد يونيكود.هو الفضاء
  • الحقول الوظيفية يقوم بإرجاع متكرر على شرائح فرعية من شريحة البايت حول تسلسلات نقاط رمز Unicode التي تلبي الشرط.

التشفير/aes

قيمة العودة نيوشيفر لم يعد ينفذ طرق NewCTR، وNewGCM، وNewCBCEncrypter، وNewCBCDecrypter. كانت هذه الأساليب غير موثقة وغير متوفرة في جميع البنى المعمارية. الآن المعنى حظر يجب أن يتم تمريرها مباشرة إلى الوظائف المناسبة التشفير/الشيفرة. حاليًا، لا يزال crypto/cipher يتحقق من هذه الأساليب على قيم الكتلة، على الرغم من أنها لم تعد مدعومة بواسطة المكتبة القياسية.

التشفير/الشيفرة

ميزة جديدة جديدGCMمعRandomNonce عائدات إيد، والذي ينفذ AES-GCM عن طريق إنشاء nonce عشوائي أثناء Seal وإضافته إلى النص المشفر.

تطبيق شريط الاحداث، عاد معدل النقر الجديد عند استخدامه مع التشفير/aes الآن أسرع عدة مرات على amd64 و arm64.

نيو أو إف بي, برنامج CFBEncrypter الجديد и برنامج NewCFBDecrypter أصبحت الآن قديمة الطراز. تعتبر أوضاع OFB وCFB غير موثوقة، مما يسمح بشكل عام للهجمات النشطة بالتلاعب بالنص العادي واستعادته. التطبيقات الموصى باستخدامها إيد في المقابل. إذا كان الوضع غير مصادق عليه شريط الاحداث ضروري، يمكن استخدامه معدل النقر الجديد بدلاً من.

التشفير/ECDSA

مفتاح خاص.توقيع الآن يقوم بإنشاء توقيع حتمي وفقًا لـ RFC 6979، إذا كان مصدر العشوائية يساوي الصفر.

تشفير/md5

قيمة العودة md5.جديد، الآن ينفذ الواجهة أيضًا الترميز.binaryappender.

عملة مشفرة/راند

وظيفة عرض الآن يضمن عدم وجود فشل. إذا واجه برنامج Read خطأً أثناء القراءة قارئسيتم إنهاء البرنامج بشكل دائم. لاحظ أن القارئ الافتراضي موثق للعمل دائمًا بنجاح، لذا يجب أن يؤثر هذا التغيير فقط على البرامج التي تتجاوز متغير القارئ. هناك استثناء واحد وهو أنوية Linux قبل 3.17، حيث لا يزال القارئ الافتراضي يفتح /dev/urandom وقد يفشل.

في Linux 6.11 والإصدارات الأحدث، يستخدم Reader الآن نداء النظام getrandom عبر vDSO. يعد هذا أسرع بعدة مرات، عادةً للقراءات الصغيرة.

يستخدم OpenBSD Reader الآن arc4random_buf(3).

ميزة جديدة نص يمكنك الآن إنشاء سلاسل نصية عشوائية آمنة تشفيريًا.

التشفير/RSA

توليد المفتاح يعود الآن خطأ إذا تم طلب طول مفتاح أقل من 1024 بت. الآن تعيد جميع طرق التوقيع والتحقق والتشفير وفك التشفير خطأً إذا تم استخدامها مع حجم مفتاح أقل من 1024 بت. هذه المفاتيح غير آمنة ولا ينبغي استخدامها. إعداد GODEBUG يقوم rsa1024min=0 باستعادة السلوك القديم، ولكن مطوري Go يوصون بالقيام بذلك فقط عند الضرورة وفي الاختبارات فقط، على سبيل المثال عن طريق إضافة السطر //go:debug rsa1024min=0 إلى ملف الاختبار. جديد مثال يوفر GenerateKey مفتاح اختبار قياسي 2024 بت سهل الاستخدام.

لقد أصبح الآن من الأكثر أمانًا وكفاءة الاتصال مفتاح خاص.حساب مسبق إلى مفتاح خاص.التحقق. أصبحت عملية الحوسبة المسبقة أسرع الآن في وجود مساحة ممتلئة جزئيًا القيم المحسوبة مسبقًا، على سبيل المثال عند استخراج مفتاح من JSON.

ترفض الحزمة الآن المزيد من المفاتيح غير الصالحة حتى عندما لا يتم استدعاء التحقق من الصحة، و توليد المفتاح يمكنك الآن إرجاع أخطاء جديدة لمصادر العشوائية المكسورة. الحقول يعبي и محسوبة مسبقا الهيكل PrivateKey يتم الآن استخدامها والتحقق من صحتها حتى عندما تكون بعض القيم مفقودة. هناك أيضًا تغييرات على crypto/x509 لتحليل واستخراج مفاتيح RSA، كما هو موضح أدناه.

تسجيل الدخول и التحقق من PKCS1v15 يدعم الآن SHA-512/224 وSHA-512/256 وSHA-3.

توليد المفتاح يستخدم الآن طريقة مختلفة قليلاً لإنشاء الأس الخاص (دالة كارمايكل بدلاً من دالة أويلر). قد تنتج التطبيقات النادرة التي تقوم بتجديد المفاتيح خارجيًا من الأعداد الأولية فقط نتائج مختلفة ولكنها متوافقة.

أصبحت العمليات على المفاتيح العامة والخاصة الآن أسرع بما يصل إلى مرتين على wasm.

التشفير/شا*

مشفر/دقيق

ميزة جديدة مع توقيت مستقل عن البيانات يسمح للمستخدم بتنفيذ وظيفة مع تمكين ميزات خاصة بالهندسة المعمارية تضمن عدم تغيير تعليمات معينة بالنسبة لوقت قيمة البيانات. يمكن استخدام هذا للتأكد من أن الكود المكتوب للتشغيل في وقت ثابت لم يتم تحسينه بواسطة وظائف مستوى المعالج بحيث يتم تشغيله في وقت متغير. حاليًا، يستخدم WithDataIndependentTiming بت PSTATE.DIT على arm64 ولا يفعل شيئًا على جميع المعماريات الأخرى. إعداد GODEBUG dataindependenttiming=1 يمكّن وضع DIT لبرنامج Go بأكمله.

إنتاج إكس أو آر بايتس يجب أن يتداخل بشكل كامل أو لا يتداخل على الإطلاق مع المدخلات. في السابق كان السلوك غير محدد بخلاف ذلك، بينما الآن سوف يصاب XORBytes بالذعر.

التشفير/TLS

يدعم خادم TLS الآن خدمة Encrypted Client Hello (ECH). يمكن تفعيل هذه الميزة عن طريق ملء الحقل. تكوين.مفاتيح العميل المشفرة.

آلية جديدة لتبادل المفاتيح بعد الكم X25519MLKEM768 الآن يتم دعمه وتمكينه افتراضيًا عند تفضيلات التكوين المنحني لا شيء. إعداد GODEBUG tlsmlkem=0 يعود الافتراضي.

تمت إزالة الدعم لتبادل المفاتيح التجريبية X25519Kyber768Draft00.

يتم الآن التعامل مع طلب تبادل المفاتيح بالكامل بواسطة حزمة crypto/tls. طلب تفضيلات التكوين المنحني يتم الآن تجاهل هذا ويتم استخدام المحتويات فقط لتحديد تبادلات المفاتيح التي سيتم تضمينها عند ملء الحقل.

حقل جديد ملحقات ClientHelloInfo يسرد قائمة معرفات الامتداد المستلمة في رسالة "مرحبا بالعميل". يمكن أن يكون هذا مفيدًا لبصمات أصابع عملاء TLS.

تشفير/x509

إعداد GODEBUG تمت إزالة x509sha1. الشهادة.التحقق لم يعد يدعم التوقيعات المستندة إلى SHA-1.

OID ينفذ الآن الواجهات الترميز.binaryappender и الترميز.TextAppender.

تم تغيير حقل سياسة الشهادة الافتراضية من معرفات سياسة الشهادة في شهادة السياسات. عند تحليل الشهادات، سيتم ملء كلا الحقلين، ولكن عند إنشاء سياسة شهادة، سيتم أخذهما من حقل Certificate.Policies بدلاً من Certificate.PolicyIdentifiers. يمكن التراجع عن هذا التغيير. إعداد GODEBUG x509usepolicies=0.

إنشاء شهادة سيتم الآن إنشاء رقم تسلسلي باستخدام طريقة متوافقة مع RFC 5280 عند تمرير حقل قالب شهادة. الرقم التسلسلي لا شيء، بدلاً من التعطل.

شهادة.التحقق يدعم الآن التحقق من صحة السياسة كما هو محدد في RFC 5280 وRFC 9618. حقل جديد التحقق من الخيارات. سياسات الشهادات يمكن ضبطها على مجموعة مقبولة من السياسات معرفات الكائن. سيتم إرجاع سلاسل الشهادات التي تحتوي على رسوم بيانية صالحة للسياسة فقط شهادة.التحقق.

مارشالPKCS8مفتاح خاص الآن يقوم بإرجاع خطأ بدلاً من استرداد مفتاح RSA غير صالح. (مارشالPKCS1مفتاح خاص لا يوجد خطأ في الإرجاع ويظل سلوكه عند توفير مفاتيح غير صالحة غير محدد.)

تحليل PKCS1المفتاح الخاص и تحليل PKCS8المفتاح الخاص الآن يمكنك استخدام قيم CRT المشفرة والتحقق منها، حتى تتمكن من رفض مفاتيح RSA غير الصالحة التي تم قبولها مسبقًا. الاستخدام إعدادات GODEBUG x509rsacrt=0 يعود إلى إعادة حساب قيم CRT.

تصحيح الأخطاء/الجن

صفقة تصحيح الأخطاء/الجن إضافة دعم للتعامل مع إصدارات الرموز في ملفات ELF الديناميكية (تنسيق قابل للتنفيذ والربط). طريقة جديدة ملف.الإصدارات الديناميكية إرجاع قائمة بالإصدارات الديناميكية المحددة في ملف ELF. طريقة جديدة ملف.DynamicVersionNeeds إرجاع قائمة بالإصدارات الديناميكية المطلوبة بواسطة ملف ELF هذا والتي تم تعريفها في كائنات ELF الأخرى. أخيرا، حقول جديدة الرمز.HasVersion и رمز.VersionIndex الإشارة إلى إصدار الرمز.

ترميز

واجهتان جديدتان ملحق النص и مُلحق ثنائي تم تقديمها لإضافة نص أو تمثيل ثنائي لكائن إلى شريحة بايت. توفر هذه الواجهات نفس الوظيفة مثل تيكست مارشالر и بيناري مارشالرولكن بدلاً من تخصيص شريحة جديدة في كل مرة، فإنهم يضيفون البيانات مباشرةً إلى شريحة موجودة. يتم تنفيذ هذه الواجهات حاليًا بواسطة أنواع المكتبات القياسية التي تنفذ بالفعل TextMarshaler و/أو BinaryMarshaler.

الترميز/json

عند البناء، سيتم حذف حقل الهيكل الذي يحتوي على خيار omitzero الجديد في علامة حقل الهيكل إذا كانت قيمته صفرًا. إذا كان نوع الحقل يحتوي على طريقة Bool IsZero()، فسيتم استخدامها لتحديد ما إذا كانت القيمة صفرًا. وإلا فإن القيمة ستكون صفرًا إذا كانت قيمة فارغة لنوعها. علامة الحقل omitzero أنظف وأقل عرضة للخطأ من omitempty عندما يكون القصد هو حذف القيم الفارغة. على وجه الخصوص، على عكس omitempty، فإن omitzero يحذف الأصفار الوقت.الوقت القيم، والتي تعد مصدرًا شائعًا للمشاكل.

إذا تم تحديد كل من omitempty وomitzero، فسيتم حذف الحقل إذا كانت القيمة فارغة أو صفرًا (أو كليهما).

خطأ في نوع الإزالة. يتضمن الآن هياكل مدمجة لتوفير رسائل خطأ أكثر تفصيلاً.

اذهب/أنواع

تحتوي جميع هياكل بيانات go/types التي تعرض تسلسلات من أزواج الطرق، مثل Len() int و At(int) T، الآن أيضًا على طرق تعيد المعاودات، مما يسمح بتبسيط الكود مثل هذا:

المعلمات := fn.Type.(*types.Signature).Params() بالنسبة إلى i := 0؛ أنا <params.Len(); i++ { استخدم(المعلمات.At(i)) }

في هذا الموضوع:

بالنسبة للمعلمة := النطاق fn.Signature().Params().Variables() { use(param) }

ملاحظات: الواجهة.الأنواع المضمنة الواجهة.الطرق الصريحة الواجهة.الطرق مجموعة الطرق الأساليب المسماة النطاق.الأطفال البنية.الحقول مجموعة متغيرات قائمة الأنواع قائمة معلمات النوع. معلمات النوع شروط الاتحاد

هاش/*

سجل/سجل

جديد معالج التخلص هو معالج لا يتم تمكينه أبدًا ويتجاهل دائمًا مخرجاته.

مستوى и مستوى متغير الآن قم بتنفيذ الواجهة الترميز.TextAppender.

الرياضيات/*

صاف

استمع إلى Condig يستخدم الآن MPTCP افتراضيًا على الأنظمة التي يدعمها (حاليًا Linux فقط).

IP الآن يتم تنفيذ الواجهة الترميز.TextAppender.

صافي/http

لقد تم تغيير القيد النقل إلى الاستجابات المعلوماتية 1xx المستلمة ردًا على الطلب. في السابق، كان هذا يؤدي إلى إيقاف الطلب وإرجاع خطأ بعد تلقي أكثر من 5 استجابات 1xx. يؤدي هذا الآن إلى إرجاع خطأ فقط إذا تجاوز الحجم الإجمالي لجميع الاستجابات 1xx إعداد التكوين النقل. أقصى عدد من بايتات رأس الاستجابة.

أيضًا، عندما يكون الطلب يحتوي على خطاف تتبع net/http/httptrace.ClientTrace.حصلت على استجابة 1xx، الآن لا يوجد حد أقصى لعدد الإجابات الإجمالي 1xx. يمكن لخطاف Got1xxResponse إرجاع خطأ لإيقاف الطلب.

النقل и المخدم أصبح لدينا الآن حقل HTTP2 الذي يسمح بتكوين إعدادات بروتوكول HTTP/2.

حقول جديدة بروتوكولات الخادم и النقل.البروتوكولات توفير طريقة بسيطة لتكوين بروتوكولات HTTP التي يستخدمها الخادم أو العميل.

يمكن تكوين الخادم والعميل لدعم اتصالات HTTP/2 غير المشفرة.

عندما بروتوكولات الخادم يحتوي على UnencrypterHTTP2، سيقبل الخادم اتصالات HTTP/2 على المنافذ غير المشفرة. يمكن للخادم قبول HTTP/1 و HTTP/2 غير المشفر على نفس المنفذ.

عندما النقل.البروتوكولات يحتوي على HTTP2 غير مشفر ولا يحتوي على HTTP1، وسوف يستخدم النقل HTTP/2 غير المشفر للعناوين http://. إذا تم تكوين النقل لاستخدام كل من HTTP/1 وHTTP/2 غير المشفر، فسوف يستخدم HTTP/1.

يدعم استخدام HTTP/2 غير المشفر "HTTP/2 مع التعلم المتقدم" (RFC 9113، القسم 3.3). لا يتم دعم العنوان القديم "الترقية: h2c".

صافي/نتيب

ADDR, منفذ العنوان и بادئة تنفيذ الواجهات الآن الترميز.binaryappender и الترميز.TextAppender.

الشبكة/عنوان URL

URL الآن يتم تنفيذ الواجهة أيضًا الترميز.binaryappender.

نظام التشغيل/المستخدم

على نظام التشغيل Windows حالياًّ يمكن الآن استخدامه في Windows Nano Server. تم تحديث التنفيذ لتجنب استخدام الوظائف من مكتبة NetApi32، والتي تفتقر إلى Nano Server.

على نظام التشغيل Windows حالياًّ, بحث и معرف البحث يدعم الآن حسابات خدمة المستخدم المضمنة التالية:

  • نظام السلطة NT
  • سلطة NTالخدمة المحلية
  • خدمة شبكة سلطة NT

على نظام التشغيل Windows حالياًّ تم تسريع الأداء بشكل كبير عندما ينضم المستخدم الحالي إلى نطاق بطيء، وهي حالة شائعة لدى العديد من مستخدمي الشركات. أصبح أداء التنفيذ الجديد الآن في حدود ميلي ثانية، مقارنة بالتنفيذ السابق، والذي قد يستغرق عدة ثوانٍ، وحتى دقائق، حتى يكتمل.

على نظام التشغيل Windows حالياًّ يعود الآن مالك العملية للمستخدم عندما ينتحل الخيط الحالي شخصية مستخدم آخر. في السابق، أدى هذا إلى حدوث خطأ.

REGEXP

التعبير العادي الآن يتم تنفيذ الواجهة الترميز.محول النص.

وقت التشغيل

وظيفة جورووت تم إيقاف استخدامه الآن. في البيئات الأحدث، يجب عليك تفضيل استخدام مسار النظام لتحديد الثنائي "go"، واستخدام go env GOROOT لتحديد GOROOT.

سلاسل

صفقة سلاسل يضيف العديد من الوظائف للعمل مع المتكررات:

  • خطوط يقوم بإرجاع متكرر على الأسطر المنفصلة بسطر جديد في سلسلة.
  • تقسيم التسلسل يقوم بإرجاع متكرر على جميع السلاسل الفرعية من السلسلة المفصولة بفاصل.
  • تقسيم بعد التسلسل يقوم بإرجاع متكرر على سلاسل فرعية من سلسلة، مقسمًا بعد كل ظهور للفاصل.
  • تسلسل الحقول يعيد متكررًا على سلاسل فرعية من سلسلة حول تسلسلات أحرف المسافة البيضاء، كما هو محدديونيكود.هو الفضاء
  • الحقول الوظيفية يقوم بإرجاع متكرر على سلاسل فرعية من السلسلة حول تسلسلات نقاط رمز Unicode التي تلبي شرطًا.

مزامنة

تطبيق مزامنة الخريطة تم تغييره لتحسين الأداء، وخاصة فيما يتعلق بتغييرات القاموس. على سبيل المثال، من غير المرجح أن تحدث نزاعات بسبب تغيير المجموعة المنفصلة في القواميس الكبيرة، ولم تعد تتطلب وقتًا للبناء لتحقيق حمل قاموس منخفض التنازع.

إذا واجهت أي مشاكل، فقم بتعيين GOEXPERIMENT=nosynchashtriemap أثناء البناء للعودة إلى التنفيذ القديم ويرجى إملأ نموذج المشكلة.

تجريب

طرق جديدة ت. السياق и ب. السياق إرجاع السياق الذي يتم تجاهله بعد اكتمال الاختبار وقبل تنفيذ وظائف تنظيف الاختبار.

طرق جديدة ت.شدير и ب. شدير يمكن استخدامه لتغيير دليل العمل طوال مدة الاختبار أو معيار الأداء.

نص/قالب

تدعم القوالب الآن range-over-func وrange-over-int.

الوقت

الوقت: ينفذ الآن الواجهات الترميز.binaryappender и الترميز.TextAppender.

الموانئ

لينكس

كما كان أعلن وفقًا لملاحظات إصدار Go 1.23، يتطلب Go 1.24 إصدار Linux kernel 3.2 أو أحدث.

داروين

Go 1.24 هو الإصدار الأخير الذي سيتم تشغيله على macOS 11 Big Sur. سيتطلب Go 1.25 نظام macOS 12 Monterey أو إصدارًا أحدث.

WebAssembly

تمت إضافة تعليمة المترجم go:wasmexport إلى برامج Go لتصدير الوظائف إلى مضيف WebAssembly.

في معاينة واجهة نظام WebAssembly 1 (GOOS=wasip1 GOARCH=wasm)، يدعم Go 1.24 بناء برنامج Go كـ المفاعل/المكتبة عن طريق تحديد علم البناء -buildmode=c-shared.

يُسمح الآن بمزيد من الأنواع كأنواع وسيطة أو نتائج لوظائف go:wasmimport. على وجه الخصوص، يُسمح بـ bool وstring وuintptr والمؤشرات لأنواع معينة (انظر التفاصيل في توثيق)، إلى جانب أنواع الأعداد الصحيحة والفاصلة العائمة ذات 32 بت و64 بت، وunsafe.Pointer، المسموح بها بالفعل. يُسمح أيضًا بهذه الأنواع كأنواع وسيطة أو نتيجة لوظائف go:wasmexport.

تم نقل ملفات الدعم لـ WebAssembly إلى lib/wasm من misc/wasm.

يتم تقليل حجم الذاكرة الأولية بشكل كبير، وخاصةً بالنسبة لتطبيقات WebAssembly الصغيرة.

ويندوز

تم وضع علامة على منفذ Windows/arm ذو 32 بت (GOOS=windows GOARCH=arm) على أنه معطل. التفاصيل في #70705

المصدر: linux.org.ru

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster