GO 1.24 منتشر شد: بهینه سازی های گسترده و ارتقاء کلیدی!

Leapcell: بهترین پلتفرم بدون سرور برای میزبانی Golang
GO 1.24 تکرار نسخه قابل توجهی در توسعه زبان GO است. در حالی که سازگاری با نسخه های قبلی را حفظ می کند ، به طور جامع ویژگی های جدید ، بهینه سازی و پیشرفت های جدید را معرفی می کند ، و به طور موثری از تدوین صاف و عملکرد اکثریت قریب به اتفاق برنامه های GO اطمینان می دهد. این به روزرسانی نه تنها ابزارهای برنامه نویسی قدرتمندتری را در اختیار توسعه دهندگان قرار می دهد بلکه عملکرد ، امنیت و قابلیت استفاده از زبان GO را نیز به میزان قابل توجهی افزایش می دهد.
I. تغییر زبان
GO 1.24 به طور کامل از نام مستعار نوع عمومی پشتیبانی می کند ، و به توسعه دهندگان اجازه می دهد تا به همان روشی که انواع معمولی را تعریف می کنند ، نام مستعار نوع را پارامتر کنند. این ویژگی انعطاف پذیری نوشتن کد را تا حد زیادی گسترش می دهد و قابلیت استفاده مجدد از کد و خوانایی را به میزان قابل توجهی بهبود می بخشد.
// Define a generic type alias
type MyAlias[T int | string] = T
func main() {
var num MyAlias[int] = 10
var str MyAlias[string] = "Hello, Go 1.24!"
}
در حال حاضر ، توسعه دهندگان می توانند این ویژگی را با تنظیم غیرفعال کنند GOEXPERIMENT=noaliastypeparams
بشر با این حال ، لازم به ذکر است که در نسخه GO 1.25 ، aliastypeparams
تنظیم به طور رسمی حذف می شود.
ii. ابزار
دستور go
در ماژول های GO ، معرفی tool
دستورالعمل پیگیری وابستگی های اجرایی در آن راحت تر می شود go.mod
پرونده این روش جایگزین عمل قبلی اضافه کردن ابزارها به عنوان واردات خالی به پرونده “Tools.go” است. از طریق go tool
فرمان ، نه تنها می توان این ابزارهای سفارشی را اجرا کرد ، بلکه ابزارهای مختلفی را که در توزیع GO گنجانده شده است. علاوه بر این ، go get
فرمان جدید دارد -tool
پرچم ، که به طور خاص برای اضافه کردن tool
دستورالعمل یک بسته مشخص شده. در tool
متا – الگوی راحتی را برای دسته ای فراهم می کند – ارتقا یا نصب همه ابزارها در یک ماژول ، مانند go get tool
با go install tool
بشر
پیشرفت هایی برای ساخت و آزمایش دستورات
پرونده های اجرایی ایجاد شده توسط go run
وت go tool
اکنون به طور خودکار در حافظه نهان ساخته شده ذخیره می شوند. این بهینه سازی اعدام های مکرر را به شدت افزایش می دهد ، اگرچه به همین ترتیب فضای حافظه نهان اشغال شده را افزایش می دهد. در go build
با go install
وت go test
دستورات همه چیز جدیدی دارند -json
FLAG ، که برای تولید نتایج و پیام های خطا در قالب JSON ساختاری استفاده می شود. در خروجی go test -json
، داده های ساخت و آزمایش نتیجه JSON با جدید متمایز می شود Action
نوع. اگر در سیستم ادغام آزمون مشکلاتی وجود داشته باشد ، توسعه دهندگان می توانند تنظیم کنند GODEBUG=gotestjsonbuildtext=1
برای بازیابی متن – خروجی قالب.
احراز هویت و تنظیم نسخه
برای برآورده کردن الزامات احراز هویت برای به دست آوردن ماژول های خصوصی در سناریوهای مختلف ، GO 1.24 اضافه کرده است GOAUTH
متغیر محیط ، ارائه یک روش احراز هویت انعطاف پذیر تر. در go build
Command نسخه اصلی ماژول فایل باینری کامپایل شده را بر اساس برچسب ها و/یا اطلاعات متعهد سیستم کنترل نسخه تنظیم می کند. هنگامی که تغییرات غیرقابل قبول وجود دارد ، شماره نسخه به طور خودکار اضافه می کند +dirty
پسوند اگر توسعه دهندگان بخواهند اطلاعات کنترل نسخه را نادیده بگیرند ، می توانند از آن استفاده کنند -buildvcs=false
پرچم در همان زمان ، جدید GODEBUG
تنظیم toolchaintrace=1
می تواند به توسعه دهندگان کمک کند تا روند انتخاب برنامه ابزار را ردیابی کنند go
فرمان
CGO
CGO قابلیت های جدیدی را در GO 1.24 به دست آورده است ، و از حاشیه نویسی عملکرد جدید C برای بهبود عملکرد زمان اجرا پشتیبانی می کند. در میان آنها ، #cgo noescape cFunctionName
برای اطلاع رسانی کامپایلری که حافظه به آن منتقل شده است استفاده می شود cFunctionname
فرار نخواهد کرد #cgo nocallback cFunctionName
نشان می دهد که این عملکرد C هیچ توابع GO را بازگرداند. علاوه بر این ، بازرسی CGO از اعلامیه های ناسازگار از توابع C دقیق تر شده است. هنگامی که اعلامیه های ناسازگار در پرونده های مختلف وجود دارد ، خطاها را می توان به موقع و دقیق تر گزارش کرد.
محبت
ابزار ObjDump دامنه پشتیبانی خود را در GO 1.24 گسترش داده است. هم اکنون می تواند عملیات جداسازی را در 64 – Bit Loongarch انجام دهد (GOARCH=loong64
) ، RISC – V (GOARCH=riscv64
) ، و S390X (GOARCH=s390x
) معماری.
دامن
ابزار دامپزشک اضافه کرده است tests
آنالایزر ، که عمدتاً برای بررسی خطاهای متداول که ممکن است در اعلامیه های تست ها ، تست های فازی ، معیارها و نمونه هایی در بسته های آزمایشی مانند قالب های نام نادرست ، امضاهای نادرست یا شناسه های غیر موجود در سوابق مثال استفاده شود ، استفاده می شود. این آنالایزر به طور خودکار اجرا می شود go test
اعدام شده است در همان زمان ، printf
آنالایزر تماس ها را تشخیص می دهد fmt.Printf(s)
(کجا s
یک رشته با فرمت غیر ثابت و بدون پارامتر دیگر است) و استفاده از آن را پیشنهاد کنید fmt.Print
در عوض در buildtag
بررسی های آنالایزر محدودیت های ساخت نسخه اصلی در نسخه //go:build
بخشنامه در copylock
آنالایزر بر تشخیص متغیرهای حاوی متمرکز است sync.Locker
(مانند sync.Mutex
) در بند 3 – برای “حلقه ها” ، به طور موثری جلوگیری از عملیات کپی قفل ناامن.
گچ
مکانیسم ذخیره باینری و آزمایش در داخل cmd/go
اکنون می تواند توسط یک فرآیند کودک از طریق GOCACHEPROG
متغیر محیط روند کودک با cmd/go
ابزار از طریق پروتکل JSON ، که در هنگام برخورد با عملیات مربوط به حافظه نهان ، انعطاف پذیری و قابلیت تنظیم بیشتر را در اختیار توسعه دهندگان قرار می دهد.
iii زمان اجرا
GO 1.24 مجموعه ای از بهینه سازی های عملکرد مؤثر را در زمان اجرا انجام داده است. تأیید شده توسط یک سری از تست های معیار نماینده ، به طور متوسط 2 – 3 ٪ کاهش در سربار CPU دارد. این بهینه سازی ها عمدتاً در ساخته جدید – در map
اجرای بر اساس جدول سوئیس ، تخصیص حافظه کوچک – کارآمدتر و یک mutex داخلی جدید اجرا. اگر توسعه دهندگان نیازهای ویژه ای دارند و می خواهند ساخته جدید را غیرفعال کنند – در map
اجرای و زمان اجرا Mutex ، آنها می توانند در طی فرآیند ساخت با تنظیم به این هدف دست یابند GOEXPERIMENT=noswissmap
وت GOEXPERIMENT=nospinbitmutex
به ترتیب
IV سازنده
در GO 1.24 ، کامپایلر بازرسی از انواع تولید شده CGO را تقویت کرده است. هنگامی که گیرنده یک نوع CGO – تولید شده (مستقیم یا غیرمستقیم از طریق نوع نام مستعار) را نشان می دهد ، کامپایلر همیشه یک پیام خطا را گزارش می کند. این به توسعه دهندگان کمک می کند تا مشکلات احتمالی را در مراحل توسعه کشف و حل کنند.
V. پیوند دهنده
در سکوی ELF ، پیوند دهنده یک شناسه ساخت GNU (یعنی ELF) ایجاد می کند NT_GNU_BUILD_ID
توجه داشته باشید) به طور پیش فرض ؛ در سکوی MACOS ، یک UUID ایجاد می کند (یعنی ماچ – o LC_UUID
دستور بارگیری) به طور پیش فرض. نسل این شناسه ها از شناسه Go Build گرفته شده است. اگر توسعه دهندگان نیازهای خاصی دارند و می خواهند این عملکرد را غیرفعال کنند ، می توانند از آن استفاده کنند -B none
پرچم اگر آنها می خواهند یک کاربر را مشخص کنند – ارزش شش ضلعی تعریف شده برای غلبه بر تنظیمات پیش فرض ، می توانند از آن استفاده کنند -B 0xNNNN
پرچم
vi راه راه راه راه راه رفتن
ساخت GO 1.24 باید با تکیه بر Go 1.22.6 یا نسخه بالاتر ، راه اندازی شود. همانطور که برنامه ریزی شده است ، انتظار می رود نسخه GO 1.26 برای Bootstrapping به نسخه انتشار نقطه GO 1.24 یا بالاتر نیاز داشته باشد.
vii کتابخانه استاندارد
فهرست – دسترسی به سیستم پرونده محدود
ظهور os.Root
نوع و os.OpenRoot
تابع امکان انجام عملیات سیستم فایل را در یک فهرست خاص به توسعه دهندگان می دهد. از طریق این مکانیسم ، می توان اطمینان حاصل کرد که کلیه عملیات به شدت در محدوده دایرکتوری مشخص شده محدود می شود ، و به طور موثری از دسترسی به مکانهای خارجی از طریق پیوندهای نمادین جلوگیری می کند ، در نتیجه امنیت و کنترل عملکرد سیستم فایل را بهبود می بخشد.
package main
import (
"fmt"
"os"
)
func main() {
root, err := os.OpenRoot("/tmp")
if err!= nil {
fmt.Println("Error opening root:", err)
return
}
defer root.Close()
file, err := root.Create("test.txt")
if err!= nil {
fmt.Println("Error creating file:", err)
return
}
defer file.Close()
}
توابع معیار جدید
در testing.B.Loop
روش کارآمدتر و خطای کمتری است – مستعد از سنتی b.N
– ساختار حلقه مبتنی بر. این می تواند اطمینان حاصل کند که هر کدام -count
فقط یک بار عملکرد معیار را اجرا می کند. این نه تنها تعداد اعدام مراحل گران قیمت و پاکسازی را کاهش می دهد بلکه به طور موثری پارامترهای تماس عملکرد و نتایج را نیز زنده نگه می دارد و مانع از انجام کامپایلر بهینه سازی های غیر ضروری در بدنه حلقه می شود.
package main
import (
"testing"
)
func BenchmarkExample(b *testing.B) {
for b.Loop() {
// Actual benchmark code
}
}
فینالیسترهای بهبود یافته
در runtime.AddCleanup
عملکرد انعطاف پذیرتر ، کارآمدتر و خطای کمتر است – مستعد از runtime.SetFinalizer
بشر این امکان را به توسعه دهندگان می دهد تا توابع پاکسازی را به اشیاء وصل کنند. هنگامی که یک شیء غیرقابل دسترسی می شود ، عملکرد پاکسازی به صورت خودکار اجرا می شود. این عملکرد از اتصال چندین توابع پاکسازی به همان شیء پشتیبانی می کند و حتی می تواند به نشانگرهای داخلی وصل شود. در مورد اشیاء تشکیل منابع دایره ای ، runtime.AddCleanup
به طور کلی باعث نشت حافظه نمی شود و آزاد شدن شیء و اشیاء مورد نظر را به تأخیر نمی اندازد. بنابراین ، هنگام نوشتن کد جدید ، استفاده از آن توصیه می شود runtime.AddCleanup
اول
بسته ضعیف جدید
معرفی weak
بسته ها نشانگرهای ضعیف را به توسعه دهندگان ارائه می دهند ، که در هنگام ایجاد حافظه بسیار مفید است – ساختارهای کارآمد مانند نقشه های ضعیف ، نقشه های متعارف و ذخیره های مختلف. ترکیب runtime.AddCleanup
وت maphash.Comparable
می تواند نیازهای استفاده را در این سناریوها بهتر برآورده کند ، و بیشتر کارایی مدیریت حافظه برنامه را بهبود بخشد.
بسته رمزنگویی جدید
در crypto/mlkem
بسته با موفقیت دو مکانیزم کلید – کوانتومی – ML – KEM – 768 و ML – KEM – 1024 را با موفقیت اجرا کرده است. در crypto/hkdf
با crypto/pbkdf2
وت crypto/sha3
بسته ها به ترتیب توابع مربوط به مشتق و عملکردهای هش را به ترتیب اجرا کرده اند. اجرای این بسته ها بر اساس golang.org/x/crypto/...
بسته بندی ، ارائه ابزارهای بیشتر و پشتیبانی از استفاده از زبان GO در زمینه رمزنگاری.
FIPS 140 – 3 انطباق
GO 1.24 مکانیسم جدیدی را برای ترویج انطباق FIPS 140 – 3 معرفی کرده است. ماژول Go Crypto ، به عنوان مجموعه ای از بسته های استاندارد داخلی کتابخانه ، می تواند به طور شفاف الگوریتم های تأیید شده FIPS 140 – 3 را پیاده سازی کند ، به این معنی که برنامه ها می توانند مستقیماً از این الگوریتم های سازگار و بدون هیچ گونه اصلاح استفاده کنند. در GOFIPS140
متغیر محیط برای انتخاب نسخه ماژول Crypto Go برای استفاده در طی فرآیند ساخت و fips140
تنظیم Godebug برای فعال کردن حالت FIPS 140 – 3 در زمان اجرا استفاده می شود. در حال حاضر ، نسخه ماژول Crypto V1.0.0 موجود در GO 1.24 توسط یک آزمایشگاه شناخته شده CMVP به طور جدی مورد آزمایش قرار می گیرد.
بسته آزمایشی جدید آزمایشی/Synctest
در testing/synctest
بسته به طور خاص پشتیبانی شدیدی را برای آزمایش کد همزمان فراهم می کند. در میان آنها ، synctest.Run
عملکرد می تواند گروهی از گوروتین ها را در یک “حباب” جدا شده شروع کند ، که در آن توابع time
بسته بندی بسته بندی بر اساس یک ساعت جعلی ؛ در synctest.Wait
از این تابع برای انتظار برای ورود به همه گوروتین ها در “حباب” فعلی برای ورود به حالت مسدود شده استفاده می شود. لازم به ذکر است که این بسته در حال حاضر در مرحله آزمایش است. برای فعال کردن آن در طی فرآیند ساخت ، GOEXPERIMENT=synctest
باید تنظیم شود و API آن ممکن است در نسخه های آینده تغییر کند.
تغییرات جزئی در کتابخانه
GO 1.24 توابع را به روز کرده و روشهای بسته های مختلف کتابخانه استاندارد را بهبود بخشیده است. به عنوان مثال ، archive
بسته به طور خودکار هنگام نوشتن دایرکتوری خالی یک عنوان دایرکتوری اضافه می کند. در bytes
وت strings
بسته ها چندین کارکرد مرتبط با تکرار را اضافه کرده اند و توسعه دهندگان را برای کار در رشته ها و برش های بایت تسهیل می کنند. بسته های فرعی چندگانه در crypto
بسته ها روش ها و کارکردهای خود را تنظیم و تقویت کرده اند ، و باعث بهبود بیشتر امنیت و عملکرد توابع مربوط به رمزنگاری می شوند. در encoding
بسته اضافه کرده است TextAppender
وت BinaryAppender
رابط ها ، بهینه سازی فرآیند سریال سازی شی. در net/http
بسته پشتیبانی خود را از HTTP/2 گسترش داده است ، و به توسعه دهندگان سرور HTTP قدرتمندتر و قابلیت های توسعه مشتری ارائه می دهد.
viii درگاه
GO 1.24 همچنین تغییراتی در نیازهای بندر محیط در حال اجرا دارد. در سیستم لینوکس ، نسخه هسته لازم است 3.2 یا بالاتر باشد. این آخرین نسخه برای پشتیبانی از MacOS 11 Big Sur است. با شروع از Go 1.25 ، MacOS 12 Monterey یا بالاتر مورد نیاز خواهد بود. از نظر WebAssembly ، go:wasmexport
دستورالعمل اضافه شده است ، پشتیبانی از انواع بیشتر و حالت های ساخت و موقعیت پرونده های پشتیبانی مربوطه نیز تغییر کرده است. علاوه بر این ، درگاه ویندوز/بازوی 32 بیتی به صورت شکسته مشخص شده و ممکن است به درستی کار نکند.
سرانجام ، من می خواهم یک بستر مناسب برای استقرار خدمات Golang را توصیه کنم: جهش
1. پشتیبانی چند – زبان
- با JavaScript ، Python ، Go یا Rust توسعه دهید.
5. پروژه های نامحدود را به صورت رایگان مستقر کنید
- فقط برای استفاده پرداخت کنید – بدون درخواست ، بدون هزینه.
3. راندمان هزینه بی نظیر
- پرداخت – به عنوان – شما – بدون هزینه بیکار بروید.
- مثال: 25 دلار از درخواست های 6.94M در زمان پاسخ متوسط 60ms پشتیبانی می کند.
4. تجربه توسعه دهنده ساده
- UI بصری برای راه اندازی بی دردسر.
- خطوط لوله CI/CD کاملاً خودکار و ادغام GITOPS.
- معیارهای واقعی – زمان و ورود به سیستم برای بینش های عملی.
5. مقیاس پذیری بی دردسر و عملکرد بالا
- خودکار – مقیاس گذاری برای رسیدگی به همزمانی بالا با سهولت.
- صفر سربار عملیاتی – فقط روی ساختمان تمرکز کنید.
در اسناد بیشتر کاوش کنید!
توییتر Leapcell: https://x.com/leapcellhq