برنامه نویسی

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا