برو 1.24

برو 1.24

انتشار جدید زبان Go، نسخه 1.24، شش ماه پس از آن منتشر می شود برو 1.23. بیشتر تغییرات در پیاده سازی زنجیره ابزار، زمان اجرا و کتابخانه ها است. مثل همیشه، انتشار فراهم می کند وعده سازگاری برو 1. طراحان زبان انتظار دارند که تقریباً تمام برنامه های Go به کامپایل و اجرا مانند قبل ادامه دهند.

تغییرات در زبان

Go 1.24 اکنون به طور کامل پشتیبانی می کند نام مستعار نوع عمومی: نام مستعار نوع را می توان به عنوان نوع اعلام شده پارامتر کرد. جزئیات در مشخصات زبان. در حال حاضر، این ویژگی را می توان با تنظیم GOEXPERIMENT=noaliatypeparams غیرفعال کرد. با این حال، گزینه aliastypeparams در Go 1.25 حذف خواهد شد.

ابزارهای

برو فرمان

ماژول های Go اکنون می توانند وابستگی های اجرایی را با استفاده از دستورالعمل ابزار در go.mod ردیابی کنند. این نیاز به راه‌حل قبلی اضافه کردن ابزارها به‌عنوان واردات خالی در فایلی به نام «tools.go» را از بین می‌برد. دستور go tool اکنون می تواند این ابزارها را علاوه بر ابزارهای همراه Go اجرا کند. اطلاعات بیشتر را می توان در یافت مستندات.

پرچم ابزار جدید برای go get باعث می‌شود علاوه بر افزودن دستورالعمل‌های نیازمند، دستورالعمل‌های ابزار به ماژول فعلی برای بسته‌های مشخص شده اضافه شوند.

جدید ابزار متا الگو به تمام ابزارهای موجود در ماژول فعلی اشاره دارد. این می تواند برای به روز رسانی همه آنها از طریق ابزار go get یا برای نصب آنها در فهرست GOBIN از طریق ابزار go install استفاده شود.

فایل های اجرایی ایجاد شده از طریق go run و رفتار جدید go tool اکنون در کش ساخت Go ذخیره می شوند. این به دلیل افزایش حافظه پنهان، راه اندازی های مکرر را ممکن می کند. #69290.

دستورهای go build و go install اکنون پرچم -json را می پذیرند، که خروجی ساخت و خطاها را به عنوان خروجی JSON ساختاریافته در خروجی استاندارد گزارش می دهد. جزئیات قالب را می توان در go help buildjson مشاهده کرد.

علاوه بر این، go test -json اکنون خطاهای خروجی و ساخت را در JSON گزارش می‌کند که با نتیجه آزمایش JSON ترکیب شده است. آنها را می توان با انواع Action جدید متمایز کرد، اما اگر در سیستم یکپارچه سازی تست مشکل ایجاد کنند، می توانید از طریق خروجی متن بیلد بازگردید. راه اندازی GODEBUG gotestjsonbuildtext=1.

متغیر محیطی جدید GOAUTH روشی منعطف برای مجوز کشیدن ماژول های خصوصی ارائه می دهد. می‌توانید جزئیات را در goaut help مشاهده کنید.

اکنون دستور go build نصب شده است نسخه ماژول اصلی در باینری کامپایل شده، بر اساس یک برچسب و/یا یک تعهد کنترل نسخه. پسوند +dirty در صورت وجود تغییرات غیرمتعهد اضافه خواهد شد. پرچم -buildvcs=false را می توان برای حذف اطلاعات کنترل نسخه از باینری استفاده کرد.

جدید راه اندازی GODEBUG toolchaintrace=1 اکنون می توان از آن برای ردیابی فرآیند انتخاب زنجیره ابزار در دستور go استفاده کرد.

Cgo

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

ابزار 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.

تحلیل‌گر کپی‌لاک موجود اکنون زمانی که متغیری در یک حلقه «for» سه‌گانه، مانند for i := iter(); انجام شد (i); i = next(i) { … }، حاوی sync.Locker است، مانند sync.Mutex. برو 1.22 رفتار چنین حلقه هایی را تغییر داد تا یک متغیر جدید برای هر تکرار ایجاد کند و مقادیر تکرار قبلی را کپی کند. این کپی برای قفل ها ایمن نیست. #66387.

GOCACHEPROG

مکانیزم داخلی cmd/go باینری و حافظه نهان آزمایشی اکنون می‌تواند توسط فرآیندهای فرزند که یک پروتکل JSON را بین ابزار cmd/go و فرآیند فرزند با نام متغیر محیطی GOCACHEPROG پیاده‌سازی می‌کنند، پیاده‌سازی کند. قبلاً برای GOEXPERIMENT بود. جزئیات پروتکل را می توان در این قسمت مشاهده کرد مستندات.

زمان تکمیل

چندین بهبود عملکرد زمان اجرا، سربار CPU را به طور متوسط ​​2-3٪ در مجموعه ای از معیارهای معرف کاهش داد. نتایج ممکن است بسته به برنامه متفاوت باشد. این بهبودها شامل اجرای نقشه داخلی جدید بر اساس جداول سوئدی، تخصیص کارآمدتر حافظه اشیاء کوچک و اجرای جدید در زمان اجرا داخلی mutex.

اجرای نقشه داخلی جدید و mutex زمان اجرای داخلی جدید را می توان به ترتیب با تنظیم 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 با مقدار هگزا دسیمال مشخص شده توسط کاربر لغو شد.

ترویج

همانطور که در برو 1.22 یادداشت انتشار، اکنون Go 1.24 برای نصب به Go 1.22.6 یا بالاتر نیاز دارد. توسعه دهندگان انتظار دارند که Go 1.26 برای عرضه به نسخه Go 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 برای تکرار بر روی یک معیار مانند b.Loop() { … } به جای ساختارهای حلقه معمولی شامل bN مانند برای محدوده bN این دو مزیت قابل توجه ارائه می دهد:

  • تابع معیار دقیقاً یک بار در هر تعداد اجرا می شود، بنابراین مراحل گران قیمت راه اندازی و پاکسازی فقط یک بار اجرا می شوند.
  • پارامترها و نتایج فراخوانی تابع فعال هستند و مانع از بهینه سازی کامل بدنه حلقه توسط کامپایلر می شود.

نهایی کننده های بهبود یافته

ویژگی جدید runtime.AddCleanup مکانیزم تکمیلی است که انعطاف پذیرتر، کارآمدتر و کمتر در معرض خطا است runtime.SetFinalizer. AddCleanup یک تابع پاکسازی را به یک شی متصل می کند که به محض در دسترس نبودن شی اجرا می شود. با این حال، برخلاف SetFinalizer، پاکسازی‌های متعدد را می‌توان به یک شی متصل کرد، پاک‌سازی‌ها را می‌توان به نشانگرهای داخلی متصل کرد، پاک‌سازی‌ها معمولاً هنگامی که اشیاء یک چرخه را تشکیل می‌دهند باعث نشتی نمی‌شوند، و پاک‌سازی‌ها انتقال شی یا اشیایی را که به آنها اشاره می‌کند به تأخیر نمی‌اندازند. کد جدید باید AddCleanup را به SetFinalizer ترجیح دهد.

پکیج ضعیف جدید

بسته جدید ضعیف نشانگرهای ضعیفی را ارائه می دهد.

اشاره گرهای ضعیف یک ابتدایی سطح پایین هستند که برای ایجاد ساختارهای کارآمد حافظه مانند دیکشنری های ضعیف برای نگاشت مقادیر، فرهنگ لغت های متعارف برای هر چیزی که توسط یک بسته پوشش داده نمی شود، ارائه شده است. منحصر به فردو انواع کش ها. برای پشتیبانی از این موارد استفاده، این نسخه نیز فراهم می کند runtime.AddCleanup и maphash.قابل مقایسه.

بسته جدید crypto/mlkem

بسته جدید crypto/mlkem ML-KEM-768 و ML-KEM-1024 را پیاده سازی می کند.

ML-KEM یک مکانیسم تبادل کلید پس کوانتومی است که قبلا به عنوان Kyber شناخته می شد و در آن مشخص شده بود FIPS 203.

بسته های جدید crypto/hkdf، crypto/pbkdf2 و crypto/sha3

بسته جدید crypto/hkdf تابع مشتق کلید «Extract-and-Expand» مبتنی بر HMAC HKDF را همانطور که در RFC 5869.

بسته جدید crypto/pbkdf2 تابع مشتق کلید مبتنی بر رمز عبور PBKDF2 را همانطور که در تعریف شده است پیاده سازی می کند RFC 8018.

بسته جدید crypto/sha3 تابع هش SHA-3 و توابع خروجی توسعه پذیر SHAKE و cSHAKE را همانطور که در FIPS 202.

هر سه بسته بر اساس بسته های golang.org/x/crypto/… موجود هستند.

انطباق با 140-3 FIPS

این نسخه شامل مجموعه ای جدید از مکانیسم ها برای اطمینان از انطباق با FIPS 140-3.

ماژول رمزگذاری Go مجموعه ای از بسته های کتابخانه استاندارد داخلی است که به طور شفاف برای پیاده سازی الگوریتم های تأیید شده FIPS 140-3 استفاده می شود. برنامه ها برای استفاده از ماژول رمزنگاری Go برای الگوریتم های تایید شده نیازی به تغییرات ندارند.

متغیر محیطی جدید GOFIPS140 را می توان برای انتخاب نسخه ماژول رمزنگاری Go برای استفاده در یک ساخت استفاده کرد. جدید راه اندازی GODEBUG از fips140 می توان برای فعال کردن حالت FIPS 140-3 در زمان اجرا استفاده کرد.

Go 1.24 شامل ماژول Go crypto نسخه 1.0.0 است که در حال حاضر با یک آزمایشگاه معتبر CMVP در حال آزمایش است.

آزمایش/همگام سازی بسته آزمایشی جدید

بسته آزمایشی جدید آزمایش/همگام سازی پشتیبانی از تست کد همزمان را فراهم می کند.

  • تابع synctest.run گروهی از گوروتین ها را در یک "حباب" مجزا اجرا می کند. در حباب تابع بسته زمان بر روی ساعت های کاذب کار کنید
  • توابع همگام سازی.صبر کنید صبر کنید تا همه گوروتین ها در حباب فعلی مسدود شوند.

جزئیات را می توان در اسناد بسته پیدا کرد.

بسته synctest آزمایشی است و باید با تنظیم GOEXPERIMENT=synctest فعال شود. بسته API ممکن است در نسخه های بعدی تغییر کند. در #67434 می توانید جزئیات بیشتر را ببینید و بازخورد ارائه دهید.

تغییرات جزئی در کتابخانه

بایگانی

پیاده سازی های (*Writer.AddFS) در archive/zip و archive/tar اکنون هدر دایرکتوری را برای یک دایرکتوری خالی می نویسند.

بایت

بسته بندی بایت چندین تابع را اضافه می کند که با تکرار کننده ها کار می کنند:

  • خطوط یک تکرار کننده را روی رشته های جدا شده با خط جدید در یک تکه بایت برمی گرداند.
  • SplitSeq یک تکرار کننده را بر روی تمام زیر اسلایس های یک تکه بایت که توسط یک جداکننده از هم جدا شده اند، برمی گرداند.
  • SplitAfterSeq یک تکرار کننده را بر روی زیر اسلایس های یک تکه بایت برمی گرداند که پس از هر رخداد جداکننده تقسیم می شود.
  • FieldsSeq همانطور که تعریف شده است، یک تکرارکننده را بر روی زیر برش‌های یک بایت در اطراف دنباله‌ای از کاراکترهای فاصله برمی‌گرداند. unicode.IsSpace
  • FieldsFuncSeq یک تکرارکننده را بر روی زیر برش‌های بایت در اطراف دنباله‌ای از نقاط کد یونیکد که گزاره را برآورده می‌کنند، برمی‌گرداند.

crypto/aes

ارزش برگشتی NewChipher دیگر روش های NewCTR، NewGCM، NewCBCEncrypter و NewCBCDecrypter را پیاده سازی نمی کند. این روش‌ها غیرمستند بودند و در همه معماری‌ها در دسترس نبودند. حالا معنی مسدود کردن باید مستقیماً به توابع مناسب منتقل شود رمز/رمز. در حال حاضر، crypto/cipher همچنان این روش‌ها را روی مقادیر Block بررسی می‌کند، حتی اگر دیگر توسط کتابخانه استاندارد پشتیبانی نمی‌شوند.

رمز/رمز

ویژگی جدید NewGCMWithRandomNonce برمی گرداند AEAD، که AES-GCM را با ایجاد یک nonce تصادفی در طول Seal و اضافه کردن آن به متن رمز پیاده سازی می کند.

اجرا جریان، بازگشت NewCTR هنگام استفاده با crypto/aes اکنون در amd64 و arm64 چندین برابر سریعتر است.

NewOFB, رمزگذار NewCFBE и NewCFBDecrypter اکنون منسوخ اعلام شده اند. حالت‌های OFB و CFB احراز هویت نشده‌اند، که به طور کلی به حملات فعال اجازه می‌دهد متن ساده را دستکاری و بازیابی کنند. استفاده از برنامه های کاربردی توصیه می شود AEAD در عوض اگر حالت احراز هویت نشده باشد جریان لازم، قابل استفاده است NewCTR در عوض

crypto/ecdsa

PrivateKey.Sign اکنون یک امضای قطعی بر اساس ایجاد می کند RFC 6979، اگر منبع تصادفی صفر باشد.

crypto/md5

ارزش برگشتی md5.new، اکنون رابط را نیز پیاده سازی می کند encoding.binaryappender.

کریپتو/رند

تابع خواندن اکنون هیچ شکستی را تضمین نمی کند. اگر Read در هنگام خواندن با خطا مواجه شد خواننده، برنامه برای همیشه خاتمه می یابد. توجه داشته باشید که Reader پیش‌فرض به گونه‌ای مستند شده است که همیشه با موفقیت کار می‌کند، بنابراین این تغییر فقط باید بر برنامه‌هایی تأثیر بگذارد که متغیر Reader را لغو می‌کنند. یک استثنا، هسته‌های لینوکس قبل از نسخه 3.17 هستند، جایی که Reader پیش‌فرض همچنان /dev/urandom را باز می‌کند و ممکن است از کار بیفتد.

در لینوکس 6.11 و جدیدتر، Reader اکنون از تماس سیستمی getrandom از طریق vDSO استفاده می کند. این چند برابر سریعتر است، معمولاً برای خواندن های کوچک.

در OpenBSD Reader اکنون از arc4random_buf(3) استفاده می کند.

ویژگی جدید متن اکنون می تواند رشته های متن تصادفی ایمن رمزنگاری شده را ایجاد کند.

crypto/rsa

GenerateKey اکنون اگر طول کلید کمتر از 1024 بیت درخواست شود، خطایی را برمی‌گرداند. همه روش‌های Sign، Verify، Encrypt و Decrypt اکنون در صورت استفاده با اندازه کلید کمتر از 1024 بیت، خطا برمی‌گردانند. چنین کلیدهایی ناامن هستند و نباید استفاده شوند. راه اندازی GODEBUG rsa1024min=0 رفتار قدیمی را بازیابی می کند، اما توسعه دهندگان Go توصیه می کنند این کار را فقط در مواقع ضروری و فقط در آزمایشات انجام دهید، برای مثال با افزودن خط //go:debug rsa1024min=0 به فایل آزمایشی. جدید مثال GenerateKey یک کلید تست استاندارد 2024 بیتی آسان برای استفاده را فراهم می کند.

اکنون تماس ایمن تر و کارآمدتر است PrivateKey.Precompute به PrivateKey.Validate. پیش محاسبه اکنون در حضور تا حدی پر شده سریعتر است مقادیر پیش محاسبه شدهبه عنوان مثال هنگام استخراج یک کلید از JSON.

این بسته اکنون کلیدهای نامعتبر بیشتری را رد می کند، حتی زمانی که Validate فراخوانی نشده باشد، و GenerateKey اکنون می تواند خطاهای جدید را برای منابع تصادفی شکسته برگرداند. فیلدها مقدمات и از پیش محاسبه شده سازه های PrivateKey در حال حاضر حتی زمانی که برخی از مقادیر گم شده اند استفاده و تایید می شوند. همچنین تغییراتی در crypto/x509 برای تجزیه و استخراج کلیدهای RSA وجود دارد که در زیر توضیح داده شده است.

SignPKCS1v15 и تأیید PKCS1v15 اکنون SHA-512/224، SHA-512/256 و SHA-3 را پشتیبانی کنید.

GenerateKey اکنون از یک روش کمی متفاوت برای تولید توان خصوصی (تابع کارمایکل به جای تابع اویلر) استفاده می کند. برنامه های نادری که به صورت خارجی کلیدها را فقط از اعداد اول بازسازی می کنند، ممکن است نتایج متفاوت اما سازگاری ایجاد کنند.

عملیات روی کلیدهای عمومی و خصوصی اکنون تا دو برابر سریعتر در wam است.

کریپتو/شا*

رمزنگاری / ظریف

ویژگی جدید WithDataIndependentTiming به کاربر اجازه می دهد تا یک تابع را با ویژگی های خاص معماری فعال اجرا کند که اطمینان حاصل کند که دستورالعمل های خاصی نسبت به زمان مقدار داده تغییر نمی کند. این را می توان برای اطمینان از اینکه کد نوشته شده برای اجرا در زمان ثابت توسط توابع سطح پردازنده بهینه سازی نشده است تا در زمان متغیر اجرا شود استفاده شود. در حال حاضر WithDataIndependentTiming از بیت PSTATE.DIT در arm64 استفاده می کند و هیچ کاری روی تمام معماری های دیگر انجام نمی دهد. راه اندازی GODEBUG dataindependenttiming=1 حالت DIT را برای کل برنامه Go فعال می کند.

نتیجه XORBytes باید به طور کامل یا اصلاً با ورودی همپوشانی داشته باشد. قبلاً رفتار در غیر این صورت تعریف نشده بود، در حالی که اکنون XORBytes وحشت خواهد کرد.

crypto/tls

سرور TLS اکنون از Encrypted Client Hello (ECH) پشتیبانی می کند. این قابلیت را می توان با پر کردن فیلد فعال کرد. Config.EncryptedClientHelloKeys.

یک مکانیسم جدید تبادل کلید پسا کوانتومی X25519MLKEM768 اکنون به طور پیش فرض پشتیبانی و فعال می شود Config.CurvePreferences صفر است راه اندازی GODEBUG tlsmlkem=0 پیش فرض را برمی گرداند.

پشتیبانی از تبادل کلید آزمایشی X25519Kyber768Draft00 حذف شده است.

سفارش تعویض کلید اکنون به طور کامل توسط بسته crypto/tls انجام می شود. سفارش دهید Config.CurvePreferences اکنون نادیده گرفته می شود و محتویات فقط برای تعیین اینکه کدام مبادلات کلید در هنگام پر شدن فیلد شامل شود استفاده می شود.

زمینه جدید ClientHelloInfo.Extensions لیستی از شناسه های برنامه افزودنی دریافت شده در پیام Client Hello را فهرست می کند. این می تواند برای انگشت نگاری مشتریان TLS مفید باشد.

crypto/x509

راه اندازی GODEBUG x509sha1 حذف شده است. تأیید دیگر از امضاهای مبتنی بر SHA-1 پشتیبانی نمی کند.

پیشنهاد اکنون رابط ها را پیاده سازی می کند encoding.binaryappender и encoding.TextAppender.

فیلد خط مشی گواهی پیش فرض تغییر کرده است Certificate.PolicyIdentifiers بر گواهینامه. سیاست ها. هنگام تجزیه گواهی‌ها، هر دو فیلد پر می‌شوند، اما هنگام ایجاد یک خط‌مشی گواهی، به جای Certificate.PolicyIdentifiers از قسمت Certificate.Policies گرفته می‌شوند. این تغییر قابل برگشت است. راه اندازی GODEBUG x509usepolicies=0.

ایجاد گواهی اکنون شماره سریال را با استفاده از روش سازگار با RFC 5280 هنگام ارسال یک فیلد الگو تولید می کند Certificate.Serial Number هیچ، به جای سقوط.

گواهی. تأیید اکنون از اعتبارسنجی خط مشی همانطور که در RFC 5280 و RFC 9618 تعریف شده است پشتیبانی می کند. فیلد جدید VerifyOptions.CertificatePolicies را می توان روی یک مجموعه قابل قبول از سیاست ها تنظیم کرد OID ها. فقط زنجیره های گواهی با نمودارهای خط مشی معتبر از آن بازگردانده می شوند گواهی. تأیید.

MarshalPKCS8PrivateKey اکنون به جای بازیابی یک کلید RSA نامعتبر، یک خطا برمی گرداند. (MarshalPKCS1PrivateKey هیچ بازگشت خطایی ندارد و رفتار آن هنگام ارائه کلیدهای نامعتبر تعریف نشده باقی می ماند.)

ParsePKCS1PrivateKey и ParsePKCS8PrivateKey اکنون از مقادیر CRT کدگذاری شده استفاده و اعتبارسنجی کنید، بنابراین می توانید کلیدهای RSA نامعتبر را که قبلاً پذیرفته شده بودند رد کنید. استفاده تنظیمات GODEBUG x509rsacrt=0 به محاسبه مجدد مقادیر CRT برمی گردد.

اشکال زدایی / جن

بسته بندی اشکال زدایی / جن پشتیبانی از مدیریت نسخه های نماد در فایل های ELF پویا (قالب اجرایی و پیوند پذیر) را اضافه می کند. روش جدید File.DynamicVersions لیستی از نسخه های پویا تعریف شده در یک فایل ELF را برمی گرداند. روش جدید File.DynamicVersionNeeds لیستی از نسخه های پویا مورد نیاز این فایل ELF را که در سایر اشیاء ELF تعریف شده اند، برمی گرداند. در نهایت، زمینه های جدید Symbol.HasVersion и نماد.VersionIndex نسخه نماد را نشان می دهد.

پشتیبانی می کند

دو رابط جدید TextAppender и BinaryAppender برای افزودن متن یا نمایش دودویی یک شی به یک تکه بایت معرفی شدند. این رابط ها همان عملکرد را ارائه می دهند TextMarshaler и BinaryMarshaler، اما به جای تخصیص هر بار یک برش جدید، داده ها را مستقیماً به یک برش موجود اضافه می کنند. این رابط‌ها در حال حاضر توسط انواع کتابخانه استانداردی که قبلاً TextMarshaler و/یا BinaryMarshaler را پیاده‌سازی می‌کنند، پیاده‌سازی می‌شوند.

رمزگذاری/json

هنگام ساخت، یک فیلد ساختاری با گزینه جدید omitzero در تگ فیلد ساختار، در صورتی که مقدار آن صفر باشد، حذف می شود. اگر نوع فیلد دارای متد Bool () IsZero باشد، از آن برای تعیین صفر بودن مقدار استفاده می شود. در غیر این صورت مقدار آن صفر خواهد بود مقدار null برای نوع آن. تگ فیلد omitzero تمیزتر و کمتر از omitempty مستعد خطا است، وقتی که قصد حذف مقادیر تهی است. به طور خاص، برخلاف omitempty، omitzero صفرها را حذف می کند زمان.زمان ارزش ها، که منبع رایج مشکلات است.

اگر هر دو omitempty و omitzero مشخص شده باشند، اگر مقدار خالی یا صفر (یا هر دو) باشد، فیلد حذف می شود.

UnmarshalTypeError.Field اکنون شامل ساختارهای داخلی برای ارائه پیام های خطای دقیق تر است.

برو/نوع

همه ساختارهای داده 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:= range fn.Signature().Params().Variables() {use(param) }

روش ها: Interface.EmbeddedTypes Interface.ExplicitMethods رابط.روش ها MethodSet.Methods نامگذاری شده.روشها دامنه.کودکان Structure.Fields Tuple.Variables TypeList.Types TypeParamList.TypeParams اتحادیه.شرایط

هش/*

log/slog

جدید Discard Handler کنترل کننده ای است که هرگز فعال نمی شود و همیشه خروجی آن را حذف می کند.

سطح и LevelVar اکنون رابط را پیاده سازی کنید encoding.TextAppender.

ریاضی/*

خالص

ListenCondig اکنون از MPTCP به طور پیش فرض در سیستم هایی که پشتیبانی می شود (در حال حاضر فقط لینوکس) استفاده می کند.

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) استفاده می کند. سرصفحه منسوخ شده "Upgrade: h2c" پشتیبانی نمی شود.

net/netip

افزودن, AdrPort и پیشوند اکنون رابط ها را پیاده سازی کنید encoding.binaryappender и encoding.TextAppender.

net/url

URL اکنون رابط را نیز پیاده سازی می کند encoding.binaryappender.

os/user

در ویندوز جاری اکنون می توان در ویندوز نانو سرور استفاده کرد. پیاده سازی برای جلوگیری از استفاده از توابع از کتابخانه NetApi32، که در سرور نانو وجود ندارد، به روز شده است.

در ویندوز جاری, گرین کارت آمریکا и LookupId اکنون از حساب های سرویس کاربری داخلی زیر پشتیبانی می کند:

  • NT AUTORITYSYSTEM
  • خدمات محلی NT
  • خدمات NT AUTHORITYNETWORK

در ویندوز جاری هنگامی که کاربر فعلی به یک دامنه آهسته ملحق می شود، که یک مورد رایج برای بسیاری از کاربران شرکتی است، سرعت قابل توجهی افزایش یافت. عملکرد پیاده‌سازی جدید در مقایسه با اجرای قبلی که ممکن است چندین ثانیه و حتی چند دقیقه طول بکشد، اکنون به ترتیب میلی‌ثانیه است.

در ویندوز جاری اکنون کاربر صاحب فرآیند را زمانی که رشته فعلی جعل هویت کاربر دیگری را نشان می دهد، برمی گرداند. قبلاً این یک خطا را نشان می داد.

regexp

Regexp اکنون رابط را پیاده سازی می کند encoding.TextAdapter.

زمان اجرا

تابع گوروت اکنون منسوخ شده است. در محیط های جدیدتر، باید ترجیح دهید از مسیر سیستم برای تعیین باینری «go» استفاده کنید و از go env GOROOT برای تعیین GOROOT استفاده کنید.

رشته های

بسته بندی رشته های چندین تابع را برای کار با تکرار کننده ها اضافه می کند:

  • خطوط یک تکرار کننده را روی خطوط جدا شده با خط جدید در یک رشته برمی گرداند.
  • SplitSeq یک تکرار کننده را بر روی تمام زیر رشته های یک رشته که توسط جداکننده از هم جدا شده اند، برمی گرداند.
  • SplitAfterSeq یک تکرار کننده را بر روی زیر رشته های یک رشته برمی گرداند که پس از هر رخداد جداکننده تقسیم می شود.
  • FieldsSeq یک تکرار کننده را بر روی زیر رشته های یک رشته در اطراف دنباله هایی از کاراکترهای فضای خالی، همانطور که تعریف شده است، برمی گرداند.unicode.IsSpace
  • FieldsFuncSeq یک تکرارکننده را بر روی زیر رشته‌های رشته در اطراف دنباله‌ای از نقاط کد یونیکد که یک گزاره را برآورده می‌کنند، برمی‌گرداند.

همگام

اجرا sync.map برای بهبود عملکرد، به ویژه برای تغییرات فرهنگ لغت، تغییر کرده است. برای مثال، مناقشه تغییر مجموعه‌ای غیرمجاز در دیکشنری‌های بزرگ کمتر محتمل است، و دیگر نیازی به زمان ایجاد برای دستیابی به بار فرهنگ لغت کم اختلاف ندارد.

اگر با مشکلی مواجه شدید، GOEXPERIMENT=nosynchashtriemap را در حین ساخت تنظیم کنید تا به اجرای قبلی برگردید و لطفاً فرم مشکل را پر کنید.

تست

روش های جدید T.Context и B.Context متنی را برگردانید که پس از اتمام آزمایش و قبل از اجرای توابع پاکسازی آزمایشی کنار گذاشته شده است.

روش های جدید تی چدیر и ب.چدیر می تواند برای تغییر دایرکتوری کاری برای مدت زمان تست یا معیار استفاده شود.

متن/قالب

اکنون قالب ها از range-over-func و range-over-int پشتیبانی می کنند.

زمان

زمان اکنون رابط ها را پیاده سازی می کند encoding.binaryappender и encoding.TextAppender.

بنادر

لینـوکــس

آن گونه که بود اعلام کرد طبق یادداشت های انتشار Go 1.23، Go 1.24 به هسته لینوکس نسخه 3.2 یا بالاتر نیاز دارد.

داروین

Go 1.24 آخرین نسخه ای است که روی macOS 11 Big Sur اجرا می شود. Go 1.25 به macOS 12 Monterey یا جدیدتر نیاز دارد.

WebAssembly

دستورالعمل کامپایلر go:wasmexport به برنامه های Go اضافه شده است تا توابع را به میزبان WebAssembly صادر کند.

در WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm)، Go 1.24 از ساخت برنامه Go به عنوان پشتیبانی می کند. راکتور/کتابخانه با تعیین پرچم ساخت -buildmode=c-shared.

اکنون انواع بیشتری به عنوان آرگومان یا انواع نتیجه برای توابع go:wasmimport مجاز هستند. به طور خاص، bool، string، uintptr و اشاره گر به انواع خاصی مجاز هستند (به جزئیات مراجعه کنید مستندات) به همراه انواع عدد صحیح و ممیز شناور 32 بیتی و 64 بیتی و unsafe.Pointer که قبلاً مجاز هستند. این انواع همچنین به عنوان انواع آرگومان یا نتیجه برای توابع go:wasmexport مجاز هستند.

فایل های پشتیبانی WebAssembly از misc/wasm به lib/wasm منتقل شده اند.

ردپای اولیه حافظه به طور قابل توجهی کاهش می یابد، به خصوص برای برنامه های کوچک WebAssembly.

ویندوز

پورت ویندوز/بازوی 32 بیتی (GOOS=windows GOARCH=arm) به عنوان خراب علامت گذاری شده است. جزئیات در #70705

منبع: linux.org.ru

خرید هاست قابل اعتماد برای سایت های دارای حفاظت DDoS، سرورهای VPS VDS 🔥 خرید هاستینگ معتبر با محافظت در برابر حملات DDoS، سرورهای VPS و VDS | ProHoster