زبان برنامه نویسی Go از زمانی که برای اولین بار در سال 2009 منتشر شد، بسیار تکامل یافته است. Go 1.18 به دلیل پشتیبانی از ژنریک ها و بسیاری به روز رسانی های مهم دیگر، نسخه ای بسیار مورد انتظار بود.
زبان برنامه نویسی Go از زمانی که برای اولین بار در سال 2009 منتشر شد، بسیار تکامل یافته است. Go 1.18 به دلیل پشتیبانی از ژنریک ها و بسیاری به روز رسانی های مهم دیگر، نسخه ای بسیار مورد انتظار بود.
برو نسخه 1.18 را در مارس 2022 منتشر کرد. در اینجا به مهم ترین تغییرات اشاره شده است.
پشتیبانی از Generics
برنامه نویسی عمومی به شما امکان می دهد توابعی بنویسید که می توانند انواع انعطاف پذیرتر را بپذیرند و برگردانند.
قبل از پشتیبانی از ژنریک، باید به طور صریح انواع پارامترها و انواع بازگشت را بیان کنید. ساده ترین شکل ژنریک به شما امکان می دهد پارامترهای تایپ نشده را مشخص کنید:
func PrintAnything[T any](thing T) {
fmt.Println(thing)
}
اما ژنریک ها قدرت بسیار بیشتری از این را ارائه می دهند. شما می توانید تقریباً هر نوع ترکیب و دانه بندی را برای پارامترها اعلام کنید. به عنوان مثال، می توانید از بسته محدودیت ها برای نوشتن تابعی استفاده کنید که بر روی هر مقداری که می توانید سفارش دهید عمل می کند. این شامل int، float ها و رشته ها می شود. در اینجا یک مثال است که نحو را نشان می دهد:
import "golang.org/x/exp/constraints"
func Max[T constraints.Ordered](input []T) (max T) {
for _, v := range input {
if v > max {
max = v
}
}
return max
}
توجه داشته باشید که این تابع از نوع عمومی، constraints.Ordered برای اعلام پارامتر و نوع برگشت آن استفاده می کند.
ژنریک ها عدم قطعیت و انعطاف در کد را فراهم می کنند. پیشنهاد Generics و تغییرات با گذشته سازگار هستند.
تست فاز
Fuzzing یک تکنیک تست نرم افزاری است که یک برنامه را با داده های اشتباه، غیرمنتظره یا غیرقابل پیش بینی تایید می کند.
بسته آزمایشی fuzzing را در 1.18 معرفی می کند، بنابراین برای تعریف فاز، باید آن را از کتابخانه استاندارد وارد کنید:
import "testing"
پس از وارد کردن بسته آزمایشی، می توانید یک شناسه از نوع *testing.F را به تابع تست ارسال کنید.
func testFunc(f *testing.F) {
// your code
}
Fuzzing پارامترهای ورودی را برای تست کد ایجاد می کند. نتیجه فازی غیرقابل پیش بینی است زیرا ورودی ها توسط کاربر تعریف نشده اند. Fuzzing باید به شما کمک کند تا تست های کد بهتری بنویسید و اشکالاتی را که نمی دانستید وجود دارند پیدا کنید.
برو پشتیبانی از فضای کاری
فضاهای کاری دایرکتوری هایی از کد منبع مشابه هستند که یک پروژه یا یک واحد بزرگتر را تشکیل می دهند. فضاهای کاری با گروه بندی کدهای مشابه بر اساس عملکرد، مدیریت و اشکال زدایی کد را آسان تر می کند.
به طور معمول، پروژه های Go را به کد منبع (src) و فایل های اجرایی (bin) تقسیم می کنید. زنجیره ابزار Go کد منبع را از اولی به فایل های اجرایی در دومی می سازد. فضاهای کاری Go به توسعه دهندگان این امکان را می دهد که با استفاده از ماژول های Go با یک ماژول اصلی خاص با چندین فضای کاری کار کنند.
دستور ایجاد فضاهای کاری به صورت زیر است:
$ go work <command>
از دستور work با دستورات فرعی مانند:
- init → یک فضای کاری در دایرکتوری مشخص شده ایجاد می کند.
- استفاده از → یک ماژول جدید به go.work، فایل فضای کاری go اضافه می کند.
- ویرایش → فایل فضای کاری go را ویرایش می کند.
- همگام سازی ← وابستگی ها را از لیست ساخت با ماژول های فضای کاری همگام می کند.
گنجاندن فضاهای کاری برای رفتن، بهره وری را طبق برنامه ریزی در توسعه زبان افزایش می دهد.
بهبود عملکرد
نسخه 1.18 Go اکنون از ARM64 Apple M1 و PowerPC 64 بیتی در کنوانسیون فراخوانی ABI پشتیبانی می کند. این باعث افزایش بیش از 10٪ در عملکرد CPU برای کاربران این دستگاه ها می شود.
متغیرهای اعلام شده و استفاده نشده در توابع اکنون به عنوان خطا در کامپایل برنامه ثبت می شوند.
دستور go build همراه با سایر دستورات مرتبط، از پرچم -asan پشتیبانی می کند که از قابلیت همکاری با C/C++ پشتیبانی می کند. این به توسعه دهندگان Go کمک می کند تا از برنامه های Go با برنامه های C و C++ استفاده کنند.
سایر به روز رسانی های مهم
دستور go get دیگر بستهها را در حالت آگاه از ماژول نصب نمیکند، که نسبت به زمانی که برای اولین بار با Go شروع به کار کردید، تغییر بزرگی است. دستور go install جایگزین get برای تنظیم وابستگی های ماژول در سراسر فضاهای کاری می شود.
از آنجایی که جستجوگر نوع اکنون کلیات را کنترل می کند، پیام های خطا ممکن است متفاوت از نسخه های قبلی ثبت شوند.
زمان کامپایل برنامه ها ممکن است در 1.18 کندتر باشد. اما زمانی که Go برنامه شما را کامپایل کرد، این روی زمان اجرا تاثیری نخواهد داشت.
میتوانید جزئیات کامل همه آخرین تغییرات را در یادداشتهای انتشار Go 1.18 بیابید.
Go 1.18 چندین افزودنی متنوع دارد
با استفاده از Go 1.18، اکنون می توانید کدهای عمومی بنویسید، با استفاده از fuzzing به طور موثر تست کنید و با استفاده از فضاهای کاری بین ماژول های Go جابجا شوید. حتی می توانید کدی بنویسید که با برنامه های C و C++ کار می کند.