سجل تحديثات Go
إصدارات الصيانة:
- go1.25، الإصدار الأول: 2025-08-12، آخر تحديث: go1.25.0 (2025-08-12)
- go1.24، الإصدار الأول: 2025-02-11، آخر تحديث: go1.24.6 (2024-08-06)
سجل التحديثات الرسمي للغة Go: Release History - The Go Programming Language
تستخدم Go الرسمية الإصدارات الدلالية لتمييز الإصدارات، التنسيق هو vالإصدار الرئيسي.الإصدار الفرعي.إصدار التصحيح (انظر Semantic Versioning)، تحديث الإصدار الرئيسي يعني حدوث Breaking Change، أي تحديث غير متوافق مع الإصدارات السابقة، تحديث الإصدار الفرعي يعني إضافة ميزات جديدة مع الحفاظ على التوافق مع الإصدارات السابقة، تحديث إصدار التصحيح يعني إصلاح مشاكل مع الحفاظ على التوافق مع الإصدارات السابقة.
فريق Go يُصدر إصداراً ثانوياً جديداً كل ستة أشهر، ويتم صيانة أحدث إصدارين ثانويين فقط على المدى الطويل، مدة الصيانة ستة أشهر لكل منهما، نظراً لأن Go تحافظ على توافق عالٍ جداً مع كل تحديث، يُنصح بترقية Go إلى أحدث إصدار بعد استقرار النسخة الجديدة.
تم اقتراح مسودة Go2.0 آخر مرة في 18 نوفمبر 2018، حينها كان الإصدار go1.13، بعد خمس سنوات، وصل الإصدار إلى go1.21، تم تجسيد أفكار Go2.0 المختلفة من خلال التحديثات التزايدية في Go1.0، أحد المؤسسين صرح بوضوح أنه قد لا يكون هناك Go2.0 في المستقبل، ستستمر Go في العمل على الحفاظ على التوافق مع الإصدارات السابقة (انظر Go 1 and the Future of Go Programs).
تلميح
هذه الصفحة مجرد نقل بسيط للسجل الرسمي، يتم تحديثها بشكل غير منتظم، للحصول على أحدث الأخبار يرجى زيارة الموقع الرسمي.
1.25
الإصدار الأول: 2025-08-12
آخر تحديث: go1.25.0 (2025-08-12)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.25 من خلال Go 1.25 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.25 - Release Patch.
على مستوى اللغة
- تمت إزالة مفهوم النوع الأساسي (core type) في الأدوية، انظر المقال الرسمي Goodbye core types
المكتبة القياسية
- إضافة
test/synctest، لاختبار الكود المتزامن - إضافة مكتبة تجريبية
encoding/json/v2، تتضمن:encoding/json/v2، سرعة إلغاء التسلسل أسرع بـ 2-10 مرات مقارنة بـ v1، انظر اختبارات الأداء go-json-experiment/jsonbenchencoding/json/jsontext، توفر قدرة التفاعل منخفض المستوى مع سلاسل json
سلسلة الأدوات
- إصدارات Go اللاحقة ستتضمن كمية قليلة من الأدوات الثنائية المُبنية مسبقاً
- go mod أضاف توجيه
ignore، لتحديد المجلدات التي يجب على أمر go تجاهلها go doc -httpيمكنه تشغيل خادم http محلي، لعرض توثيق الكود- go vet، أضاف محللي
waitgroupوhostport - عند تحديث سطر الأوامر go لإصدار go في
go.modأوgo.work، لم يعد يضيف إصدار go toolchain المحدد
وقت التشغيل
GOMAXPROCS في بيئة الحاويات سيكون واعياً لحدود CPU للحاوية
GC تجريبي جديد
greenteagc، وحدة الجدولة الأساسية لـ GC تغيرت من object إلى memory spanعندما لا يتم التقاط panic، لم يعد يُطبع بشكل متكرر
panic: PANIC [recovered] panic: PANICأصبح
panic: PANIC [recovered, repanicked]إضافة
runtime/trace.FlightRecorder، قادرة على التقاط معلومات تنفيذ وقت التشغيل بشكل مستمر بطريقة أخف
المجمع
إصلاح خطأ فحص المؤشر الفارغ المؤجل في 1.21 (التأخير حتى بعد فحص الأخطاء)، الكود التالي الذي يبدو به مشكلة واضحة، كان يعمل بشكل طبيعي قبل إصدار 1.25
gopackage main import "os" func main() { f, err := os.Open("nonExistentFile") name := f.Name() if err != nil { println("should panic") // قبل 1.25 كان سيُخرج هذا السطر return } println(name) }المجمع سيحجز ذاكرة احتياطية أكثر للشرائح الموجودة على المكدس، لتحسين أداء الاستخدام
دعم توليد معلومات تصحيح DWARF5
1.24
الإصدار الأول: 2025-02-11
آخر تحديث: go1.24.6 (2025-08-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.24 من خلال Go 1.24 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.24 - Release Patch.
على مستوى اللغة
أسماء مستعارة للأنواع العامة، تسمح بإنشاء أسماء مستعارة للأنواع العامة، هذا مفيد جداً عند الإشارة إلى الأنواع العامة المحددة من قبل أطراف ثالثة، مثلاً
goimport ( "other" ) type MyQuque[T any] = other.Queue[T]
المكتبة القياسية
- إضافة حزمة
weak: توفر مؤشرات ضعيفة (Weak Pointers)، تسمح للكائنات بأن يُشار إليها دون زيادة عدد المراجع، تجنب تسرب الذاكرة الناتج عن التخزين المؤقت، يجب فحص ما إذا كان المؤشرnilقبل الاستخدام - قيود الوصول لنظام الملفات: تقديم نوع
os.Root، تقييد عمليات الملفات داخل دليل محدد، تعزيز الأمان - دعم التشفير والتجزئة: إضافة حزم
crypto/mlkem،crypto/hkdf،crypto/pbkdf2وcrypto/sha3، تحسين أداء خوارزميات التشفير الحالية - إضافة دالة اختبار الأداء
testing.B.Loop، لإجراء اختبارات حلقة بشكل أفضل encoding/json: إضافة وسمomitzero، دعم تصفية القيم الصفرية بناءً على طريقةIsZero()stringsوbytes: إضافة دوال المكرر (مثلLines،SplitSeq،FieldsSeq)
وقت التشغيل
- إعادة بناء map المدمجة بناءً على Swiss Tables، سرعة الوصول إلى map الكبيرة تحسنت بنسبة 30%، سرعة التكرار تحسنت بنسبة 10%-60%
sync.Mapتغير لاستخدام تجزئة Trie المتزامنة (hash-trie) لتحسين الأداء، خاصة في حالات الكتابة المتزامنة- أقفال mutex الداخلية لوقت التشغيل تستخدم تنفيذ spinbit الجديد، تقليل تنافس الأقفال، تحسين الأداء في سيناريوهات التزامن العالي
- تحسين استراتيجية تخصيص الكائنات الصغيرة، تقليل تجزئة الذاكرة ووقت توقف GC
- إضافة
runtime.AddCleanupكبديل لـruntime.SetFinalizer، دعم تسجيل دوال تنظيف متعددة للكائنات، وتنفيذها بالتتابع في goroutine مستقل
Cgo
- دعم التعليقات التوضيحية
#cgo noescapeو#cgo nocallback، تعلن على التوالي أن دوال C لا تهرب من الذاكرة ولا تستدعي دوال Go، تحسين أداء وقت التشغيل - Cgo الآن سيرفض تجميع الاستدعاءات لدوال C التي لها إعلانات متعددة غير متوافقة، الكشف الصارم عن إعلانات دوال C غير المتوافقة عبر الملفات (مثل
void f(int)وvoid f(double))، تجنب توليد تسلسلات استدعاء خاطئة
سلسلة الأدوات
- إدارة تبعيات أدوات الوحدات: من خلال توجيه tool في go.mod لتتبع تبعيات الأدوات، استبدال مخطط الاستيراد الفارغ tools.go التقليدي
- الإخراج المنظم: go build و go test يدعمان علامة -json، إخراج نتائج البناء والاختبار بصيغة JSON
- تحسينات التجميع والربط: المجمع يحسن كفاءة توليد الكود، الرابط يولد افتراضياً GNU Build ID (منصة ELF) و UUID (macOS)
- حظر تجاوز قيود تعريف الطرق لأنواع CGO المولدة من خلال الأسماء المستعارة
go buildيضمن تلقائياً معلومات نظام التحكم في الإصدار إلى الملف الثنائي (يدعم-buildvcs=falseللتعطيل)- متغير البيئة
GOAUTHيدعم مصادقة الوحدات الخاصة go.modيدعم توجيهtoolلإدارة التبعيات القابلة للتنفيذ، استبدال الاستيراد الفارغtools.go- إضافة معامل
go get -toolوأمرgo install toolلإدارة تبعيات أدوات الوحدات - ذاكرة التخزين المؤقت للبناء تدعم التخزين المؤقت الثنائي لـ
go runوgo tool objdumpيدعم فك التجميع لـ LoongArch و RISC-V و S390Xvetأضاف محللtests(لكشف أخطاء توقيع دوال الاختبار)
توافق المنصات
- macOS: Go 1.24 هو آخر إصدار يدعم macOS 11 Big Sur، Go 1.25 سيتطلب macOS 12+
- Windows: وضع علامة على بنية ARM 32-bit على أنها غير مكتملة (GOOS=windows GOARCH=arm)، انظر issue #70705
- Linux: تم ترقية متطلبات الحد الأدنى لإصدار النواة إلى 3.2
- يتطلب Go 1.22.6+ كسلسلة أدوات تمهيدية
إهمال
math/rand.Seed()أصبحت غير فعالة تماماً، يجب استخدامGODEBUG=randseednop=0لاستعادة السلوك القديم.runtime.GOROOT()وُضعت علامة عليها كمُهملة، يُوصى بالحصول على المسار من خلالgo env GOROOT
1.23
الإصدار الأول: 2024-08-13
آخر تحديث: go1.23.4 (2024-12-03)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.23 من خلال Go 1.23 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.23 - Release Patch.
على مستوى اللغة
for range تدعم دوال المكرر، للمعلومات التفصيلية انظر Go Wiki: Rangefunc Experiment.
gofunc Upper(s []string) iter.Seq2[int, string] { return func(yield func(int, string) bool) { for i, s1 := range s { if !yield(i, strings.ToUpper(s1)) { return } } return } } func main() { sl := []string{"hello", "world", "golang"} for i, s := range Upper(sl) { fmt.Printf("%d : %s\n", i, s) } } //0 : HELLO //1 : WORLD //2 : GOLANGهذه ميزة عملية نسبياً، تُستخدم عموماً مع الأدوية.
المكتبة القياسية
إضافة مكتبة قياسية
iter، تُعرف وتصف المعلومات التفصيلية حول المكرراتمكتبة
mapsأضافت عدة دوال مكررمكتبة
slicesأضافت عدة دوال مكررإضافة مكتبة
structs، توفر القدرة على تعديل خصائص الهياكل، مثل تخطيط الذاكرةgotype Person struct { Name string Age int _ structs.HostLayout }تحسين تنفيذ المكتبة القياسية
time
الرابط
معالجة إساءة استخدام
//go:linkname، لبعض APIs التي يُشار إليها كثيراً يُسمح بوجودها مؤقتاً، مثلruntime.memhash64،runtime.nanotimeوما إلى ذلك، بعد ذلك لن يُسمح بالمراجع الجديدة الأخرى.go//go:linkname gcinit runtime.gcinit func gcinit() func main() { gcinit() }كود مثل هذا لن يتمكن من المرور بالتجميع
link: main: invalid reference to runtime.gcinit
سلسلة الأدوات
- إضافة أمر
go telemetryلإدارة بيانات القياس عن بعد
1.22
الإصدار الأول: 2024-02-06
آخر تحديث: go1.22.6 (صدر 2024-08-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.22 من خلال Go 1.22 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.22 - Release Patch.
على مستوى اللغة
حل مشكلة متغير الحلقة في لغة go
gofunc main() { var wg sync.WaitGroup const n = 10 wg.Add(n) for i := 0; i < n; i++ { go func() { fmt.Println(i) wg.Done() }() } wg.Wait() }هذا الكود قبل 1.22، سيُخرج 10 أرقام 9، بعد 1.22 سيُخرج بشكل طبيعي من 0 إلى 9.
for rangeالآن يدعم تكرار الأنواع الرقمية، كالتاليgofor i := range 10 { fmt.Println(i) }
المكتبة القياسية
تحسين التوجيه في المكتبة القياسية
net/httpdatabase/sqlأضاف نوع عامsql.Nullgotype Null[T any] struct { V T Valid bool }الاستخدام كالتالي
gotype Person struct { Name sql.Null[string] Age sql.Null[int] }
1.21
الإصدار الأول: 2023-08-08
آخر تحديث: go1.21.13 (صدر 2024-08-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.21 من خلال Go 1.21 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.21 - Release Patch.
على مستوى اللغة
إضافة دالتين مدمجتين
minوmax، لحساب القيمة الأصغر والأكبر.إضافة دالة مدمجة
clear، لمسح map و sliceتحديث ترتيب تهيئة
package- ترتيب جميع الحزم حسب مسار الاستيراد
- تنفيذ متكرر حتى تصبح قائمة الحزم فارغة
- إيجاد أول حزمة تم تهيئة جميع استيراداتها
- تهيئة تلك الحزمة وإزالتها من القائمة
تحسين قدرة ودقة استنتاج النوع، خاصة ما يتعلق بالأدوية.
إصدار معاينة لتحسين متغير حلقة
for range، هذه مشكلة أزعجت مطوري Go لقرابة عشر سنوات، المسؤول أخيراً سيعمل على حلها، للتفاصيل انظر: LoopvarExperiment · golang/go Wiki (github.com) و Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)ضمان أن قيمة إرجاع
recoverلن تكونnil، إذا كان معاملpanicهوnilعند الاستدعاء، فسيتم تشغيلpanicآخر، يُرجع*runtime.PanicNilError. للتوافق، عند التجميع ضبطGODEBUG=panicnil=1للسماح بتمريرnilإلىpanic.
المكتبة القياسية
- إضافة مكتبة
log/slog، توفر مكتبة تسجيل هيكلية قياسية - إضافة مكتبة
testing/slogtest، للتحقق من تنفيذslog.Handler - إضافة مكتبة
slices، توفر سلسلة من الدوال العامة للتعامل مع الشرائح. - إضافة مكتبة
maps، توفر سلسلة من الدوال العامة للتعامل مع map - إضافة مكتبة
cmp، لمقارنة الأنواع المرتبة.
أخرى
- go1.21.0 يتطلب على الأقل نظام win10 أو Windows Server 2016 أو أحدث ليعمل على نظام windows، الإصدارات السابقة لم تعد مدعومة.
- go1.21.0 يتطلب على الأقل macOS 10.15 Catalina أو أحدث ليعمل، الإصدارات السابقة لم تعد مدعومة.
- إضافة دعم تجريبي لـ WebAssembly System Interface، Go لا يزال يستكشف WASM باستمرار.
- في 1.20 كان PGO (Profile-guide optimization) تجريبياً (انظر Profile-guided optimization - The Go Programming Language)، في إصدار 1.21 تم تفعيله رسمياً. وجود ملف
default.pgoفي الحزمة main سيُفعل هذه الميزة، بعد التفعيل قد تتحسن الأداء بنسبة 2%-7%. - عند طباعة مكدس استدعاء وقت التشغيل العميق جداً، من طباعة أول 100 إطار فقط، إلى طباعة أول 50 وآخر 50 إطار.
- تحسين أداء استدعاء CGO على منصة Unix، من 1-3 ميكروثانية إلى 100-200 نانوثانية الآن.
- في إصدار 1.21، تحسنت سرعة التجميع بنسبة تقارب 6%، يعود الفضل بشكل رئيسي إلى أن المجمع نفسه يُبنى باستخدام PGO.
1.20
الإصدار الأول: 2023-02-01
آخر تحديث: go1.20.14 (صدر 2024-02-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.20 من خلال Go 1.20 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.20 - Release Patch.
على مستوى اللغة
- عند تحويل نوع الشريحة إلى مصفوفة، كان يجب سابقاً إلغاء مرجعة مصفوفة المؤشر
*(*[4byte])(x)لتجنب العمل على نفس المصفوفة الأساسية مع الشريحة، الآن يمكن كتابتها مباشرة[4]byte(x). unsafeأضاف دوالSliceData،String،StringData، لبناء وهيكلة قيم الشرائح والسلاسل.
المكتبة القياسية
- إضافة مكتبة
crypto/ecdh، توفر دعماً لـ ECDH (Elliptic Curve Diffie-Hellman، طريقة تشفير غير متماثلة). - go1.20 وسّع دعم تغليف error، يسمح لـ error بتغليف عدة errors.
- إضافة
net/http.ResponseContorller، توفر طريقة أوضح وأسهل للاكتشاف لإضافة ضوابط لكل handler. httputil.ReverseProxyتتضمن دالة Hook جديدة Rewrite، لاستبدال Director Hook السابق.
أخرى
- go1.20 هو آخر إصدار يدعم win7، 8، Server2008 و Server2012، الإصدارات المستقبلية لن توفر دعماً.
- go1.20 هو آخر إصدار يدعم macOS 10.13 أو 10.14، الإصدارات المستقبلية لن توفر دعماً.
- في إصداري 1.18 و 1.19، بسبب ظهور الأدوية، تراجعت سرعة التجميع مقارنة بـ 1.17، سرعة تجميع go1.20 ستتحسن بنحو 10%.
- إصدار معاينة PGO (Profile-guided optimization)، هذه تقنية تحسين للمجمع في عالم الحواسيب، يمكنها تحسين أداء وقت التشغيل.
- في go1.20، على الأنظمة بدون C toolchains، أمر go يعطل cgo.
- دعم جمع ملفات تغطية كود البرنامج، انظر Coverage profiling support for integration tests - The Go Programming Language
- تحسينات على GC، تحسين الاستقرار، تقليل استهلاك الذاكرة، تحسين أداء CPU الإجمالي بنسبة 2%.
1.19
الإصدار الأول: 2022-08-02
آخر تحديث: go1.19.13 (صدر 2023-09-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.19 من خلال Go 1.19 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.19 - Release Patch.
تغييرات مهمة
نموذج الذاكرة يتماشى مع c/c++، مشابه لـ TcMollcate
حزمة
sync/atomicالآن توفر أنواعاً أكثر للاستخدامدعم استخدام دالة
runtime/debug.SetMemoryLimitلوضع حد مرن لذاكرة go، في بعض الحالات يمكن تحسين كفاءة استخدام الذاكرةوقت التشغيل الآن سيختار حجماً مناسباً لتهيئة مساحة ذاكرة المكدس بناءً على متوسط استخدام مكدس goroutine، هذا يمكن تجنب التوسع والتقلص المتكرر للمكدس
1.18
الإصدار الأول: 2022-03-15
آخر تحديث: go1.18.10 (صدر 2023-01-10)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.18 من خلال Go 1.18 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.18 - Release Patch.
على مستوى اللغة
- تحديث ثقيل، دعم الأدوية، واجهات مجموعة الأنواع، قيود أنواع المعاملات
أخرى
- تحسين سلوك التوسع لدالة
append - إضافة حزمة
debug/buildinfo، يمكن الحصول على معلومات بناء برنامج go أثناء وقت التشغيل - gofmt الآن يمكنه تنسيق الملفات المصدرية بشكل متزامن
1.17
الإصدار الأول: 2021-08-16
آخر تحديث: go1.17.13 (صدر 2022-08-01)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.17 من خلال Go 1.17 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.17 - Release Patch.
على مستوى اللغة
- إضافة دالة
unsafe.Add، دعم عمليات المؤشر - إضافة دالة
unsafe.Slice، دعم الحصول على مؤشر المصفوفة الأساسية للشريحة - الشرائح الآن يمكن تحويلها إلى نوع مؤشر المصفوفة،
[]T => *[N]T، بشرط أن يكون طول المصفوفة أقل من أو يساوي طول الشريحة
1.16
الإصدار الأول: 2021-02-16
آخر تحديث: go1.16.15 (صدر 2022-03-03)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.16 من خلال Go 1.16 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.16 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي
- إهمال حزمة
ioutil - دعم تضمين بعض الملفات الثابتة في البرنامج من خلال توجيه
//go:embed - إضافة نوع
io/fs.Fs، تجريد أفضل لنظام الملفات
1.15
الإصدار الأول: 2020-08-11
آخر تحديث: go1.15.15 (صدر 2021-08-05)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.15 من خلال Go 1.15 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.15 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي
تحسين كفاءة تخصيص الكائنات الصغيرة
إضافة حزمة
time/tzdata، دعم تضمين قاعدة بيانات المنطقة الزمنية في البرنامج بالطريقة التالية، لأن العديد من الأنظمة ليس لديها معلومات بيانات المنطقة الزمنية محلياً.goimprot _ "time/tzdata"تحسينات كبيرة على رابط go، تقليل استخدام الموارد، وتحسين قوة الكود
في بعض الحالات، السماح بتحويل
unsafe.Pointerإلىuinptr
1.14
الإصدار الأول: 2020-02-25
آخر تحديث: go1.14.15 (صدر 2021-02-04)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.14 من خلال Go 1.14 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.14 - Release Patch.
على مستوى اللغة
دعم تداخل أنواع واجهات مجموعات الطرق
gotype MyIO interface { io.WriteCloser }
أخرى
- إدخال تحسين الترميز المفتوح، تكلفة استدعاء
deferانخفضت لتكاد تكون مثل الاستدعاء الأصلي - دعم الاستباق غير المتزامن بين goroutines، الحلقات بدون استدعاءات دوال لن تمنع الجدولة بشكل دائم بعد الآن
1.13
الإصدار الأول: 2019-09-03
آخر تحديث: go1.13.15 (صدر 2020-08-06)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.13 من خلال Go 1.13 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.13 - Release Patch.
على مستوى اللغة
دعم القيم الحرفية للأرقام الأكثر حداثة، مثل
go0b101 // ثنائي 0o10 // ثماني 0x1B // ست عشريدعم تسطير أسفل السطر لفصل الأرقام لتحسين قابلية القراءة
go10_000لاحقة العدد التخيلي
iيمكن أن تكون أي رقم ثنائي، عشري، ست عشري، أو عدد عشري
أخرى
- قيمة
GO111MODULEالافتراضية هيauto - إضافة متغير البيئة
GOPRIVATEلدعم مصادر التبعيات الخاصة - إضافة متغير البيئة
GOSUMDB - تكلفة استخدام
deferانخفضت بنسبة 30% - عند حدوث تجاوز فهرس،
panicالآن سيطبع معلومات الفهرس - go سيقوم بالتحقق من الإصدار الدلالي عند تنزيل التبعيات
1.12
الإصدار الأول: 2019-02-25
آخر تحديث: go1.12.17 (صدر 2020-02-12)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.12 من خلال Go 1.12 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.12 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي
- تحسين ملحوظ في أداء مسح الكومة
- وقت التشغيل سيحرر الذاكرة المطلوبة من نظام التشغيل بشكل أكثر إيجابية
- أوامر تنزيل تبعيات go يمكن استخدامها بشكل آمن متزامن الآن
1.11
الإصدار الأول: 2018-08-24
آخر تحديث: go1.11.13 (صدر 2019-08-13)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.11 من خلال Go 1.11 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.11 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي
- الإصدار الأول لـ GoMod، الفوضى السابقة في إدارة التبعيات ستنتهي
- أول دعم تجريبي لـ WASM
- وقت التشغيل يتبنى تخطيط كومة متفرق، لم يعد يحد من حجم الكومة
1.10
الإصدار الأول: 2018-02-16
آخر تحديث: go1.10.8 (صدر 2019-01-23)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.10 من خلال Go 1.10 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.10 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي
- أمر
go installالآن يُستخدم فقط لتثبيت وتجميع أدوات سطر الأوامر، لم يعد يُستخدم لتنزيل التبعيات - أمر
go getالآن يُستخدم لتنزيل تبعيات الكود المصدري - اختبار go الآن سيخزن نتائج الاختبار مؤقتاً، وسيقوم بتشغيل
go vetتلقائياً قبل التشغيل - تقليل ملحوظ للتأخير الناتج عن GC عند نشاطه
1.9
الإصدار الأول: 2017-08-24
آخر تحديث: go1.9.7 (صدر 2018-06-05)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.9 من خلال Go 1.9 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.9 - Release Patch.
على مستوى اللغة
- دعم الأسماء المستعارة للأنواع
أخرى
- دعم التجميع المتوازي
- إضافة
sync.Mapالآمنة للتزامن
1.8
الإصدار الأول: 2017-02-16
آخر تحديث: go1.8.7 (صدر 2018-02-07)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.8 من خلال Go 1.8 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.8 - Release Patch.
على مستوى اللغة
عند تحويل نوعين من الهياكل، سيتم تجاهل اختلاف tags الهيكل
gofunc example() { type T1 struct { X int `json:"foo"` } type T2 struct { X int `json:"bar"` } var v1 T1 var v2 T2 v1 = T1(v2) // الآن قانوني }
أخرى
- وقت الإيقاف الناتج عن جمع المهملات منخفض إلى 10 ميكروثانية، في معظم الحالات أقل من 100 ميكروثانية (يمكن ملاحظة أن كل إصدار تقريباً go تعمل على تحسين GC)
- تكلفة استدعاء
deferانخفضت بنحو النصف - تكلفة استدعاء go لـ c انخفضت بنحو النصف
- تحسين كشف الاستخدام المتزامن لـ map
1.7
الإصدار الأول: 2016-08-15
آخر تحديث: go1.7.6 (صدر 2017-05-23)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.7 من خلال Go 1.7 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.7 - Release Patch.
تغييرات مهمة
- إضافة
golang.org/x/net/contextإلى المكتبة القياسية - وقت gc قُلّص بشكل كبير مقارنة بـ 1.6
- حزمة
testingتدعم الاختبارات الفرعية
1.6
الإصدار الأول: 2016-02-17
آخر تحديث: go1.6.4 (صدر 2016-12-01)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.6 من خلال Go 1.6 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.6 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية، التغييرات المهمة كالتالي
- كشف الاستخدام المتزامن لـ map، إذا تم اكتشاف أن map يُستخدم بشكل متزامن سيتم طرح
fatal - عند حدوث
panic، سيتم طباعة مكدس الاستدعاء لـ goroutine قيد التشغيل فقط - دعم HTTP/2
1.5
الإصدار الأول: 2015-08-19
آخر تحديث: go1.5.4 (صدر 2016-04-12)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.5 من خلال Go 1.5 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.5 - Release Patch.
على مستوى اللغة
عند تهيئة مفاتيح map الحرفية، يُسمح بحذف نوع العنصر
gom := map[Point]string{ Point{29.935523, 52.891566}: "Persepolis", Point{-25.352594, 131.034361}: "Uluru", Point{37.422455, -122.084306}: "Googleplex", } // حذف النوع m := map[Point]string{ {29.935523, 52.891566}: "Persepolis", {-25.352594, 131.034361}: "Uluru", {37.422455, -122.084306}: "Googleplex", }
أخرى
- وقت التشغيل والمجمع أُعيدت كتابتهما بالكامل بـ go، لم يعودا يحتويان على أي كود c
- دعم جمع المهملات المتزامن، تقليل وقت إيقاف البرنامج بشكل كبير
- القيمة الافتراضية لـ
GOMAXPROCSأصبحت عدد النوى المنطقية للجهاز - دلالات حزمة
internalيمكن تطبيقها في أي مكان، لم تعد مقتصرة على حزم كود go المصدرية - دعم تجريبي لإدارة تبعيات vendor (أخيراً بدأ العمل على معالجة إدارة التبعيات)
1.4
الإصدار الأول: 2014-12-10
آخر تحديث: go1.4.3 (صدر 2015-09-22)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.4 من خلال Go 1.4 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.4 - Release Patch.
على مستوى اللغة
حلقة
for rangeيمكن أن تأخذ معامل تكرار واحد، مثلfor i := range x { ... }لكن لا يمكن أن لا يوجد أي معامل
عند استدعاء طريقة لنوع مرجع مزدوج، لم يعد يتم إلغاء المرجع تلقائياً
gotype T int func (T) M() {} var x **T // غير مسموح به x.M()
أخرى
- قبل 1.4، كان وقت تشغيل go مكتوباً بـ c، الآن كُتب بالكامل بـ go
- دعم تغيير اسم الحزمة إلى
internalللإشارة إلى أن جميع محتويات الحزمة خاصة وغير قابلة للتصدير
1.3
الإصدار الأول: 2014-06-18
آخر تحديث: go1.3.3 (صدر 2014-09-30)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.3 من خلال Go 1.3 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.3 - Release Patch.
تغييرات مهمة
هذا الإصدار ليس به تغييرات نحوية، بعض التغييرات المهمة كالتالي
- نموذج مكدس goroutine تغير من المكدس المقسم إلى المكدس المستمر، تحسين أداء توسع المكدس.
- تحسين دقة حكم المؤشر لمجمع المهملات
- في map ذات السعة الصغيرة، التكرار سيصبح غير متوقع الترتيب أيضاً
- بسبب بعض التحسينات في وقت التشغيل، أداء برنامج go في هذا الإصدار تحسن بشكل ملحوظ
1.2
الإصدار الأول: 2013-12-01
آخر تحديث: go1.2.2 (صدر 2014-05-05)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.2 من خلال Go 1.2 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.2 - Release Patch.
على مستوى اللغة
العمليات على متغير بقيمة
nilستسببpanicعند تقسيم شريحة، يمكن استخدام معامل ثالث لتحديد سعة الشريحة المقسمة لاستخدام أكثر أماناً للشريحة
govar array [10]int slice := array[2:4:4]
أخرى
الحد الأدنى لحجم ذاكرة مكدس goroutine ارتفع من 4KB إلى 8KB
تحديد الحد الأقصى لعدد الخيوط بـ 10000
goroutines طويلة التشغيل سيتم استباقها عند حدوث استدعاء دالة (أول إدخال للاستباض التعاوني)
1.1
الإصدار الأول: 2013-05-13
آخر تحديث: go1.1.2 (صدر 2013-08-13)
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.1 من خلال Go 1.1 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.1 - Release Patch.
على مستوى اللغة
- قسمة عدد على 0 كانت سابقاً تسبب
panic، في 1.1 أصبحت لا تمر بالتجميع مباشرة. - الطرق يمكن أن تكون قيمة موجودة.
- إدخال مفهوم بيان الإنهاء، قواعد إرجاع الدوال أصبحت أكثر مرونة، تعريف بيان الإنهاء - go-spec.
من حيث الأداء
- أداء برنامج go المُجمّع بأدوات go1.1 يمكن أن يتحسن بنحو 30%-40%
أخرى:
- على أجهزة 64-bit الحد الأقصى لذاكرة الكومة ارتفع إلى عشرات GB
- التجميع المتقاطع يعطل cgo افتراضياً
1.0
الإصدار الأول: 2012-03-28
يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.0 من خلال Go 1.0 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.0 - Release Patch.
على مستوى اللغة
مقارنة بالإصدار المعاين، أُضيفت الأشياء التالية نحوياً
إضافة دالة مدمجة
append، لإضافة عناصر إلى الشرائحإضافة دالة مدمجة
close، لإغلاق القنواتدلالات مركبة، عند تهيئة عناصر حرفية للشرائح، map، الهياكل، يمكن حذف نوعها، كالتالي
go// تعريف النوع holiday1 := []Date{ Date{"Feb", 14}, Date{"Nov", 11}, Date{"Dec", 25}, } // حذف النوع holiday2 := []Date{ {"Feb", 14}, {"Nov", 11}, {"Dec", 25}, }goroutines المستخدمة في دالة
initستبدأ مباشرة، لا تحتاج لانتظار تهيئة جميع الحزم.إضافة نوع
rune، يمثل حرف UTF-8إضافة واجهة مدمجة
error، تمثل نوع الخطأإضافة دالة مدمجة
deleteلحذف أزواج المفتاح-القيمة في mapترتيب تكرار map باستخدام
for rangeأصبح غير متوقعدعم الإسناد لعدة متغيرات في نفس الوقت
a := 1 b := 2 a, b = 3, 4مشكلة إخفاء المتغيرات: عندما يكون للدالة قيم إرجاع مسماة، إذا تم إخفاء أي قيمة إرجاع، فيجب أن تحمل جملة
returnقيم الإرجاع، وإلا لن يمر التجميع، إليك مثال خطأgofunc Bug() (i, j, k int) { for i = 0; i < 5; i++ { for j := 0; j < 5; j++ { // يُعيد تعريف j. k += i * j if k > 100 { return // مرفوض: j مخفية هنا. } } } return // موافق: j غير مخفية هنا. }السماح بنسخ قيم الهياكل التي تحتوي على حقول خاصة
في حالة تكون الهياكل والشرائح من عناصر قابلة للمقارنة، السماح لها أن تكون مفاتيح لـ map، مع إزالة قابلية مقارنة الدوال و map
بجانب مستوى اللغة، go1.0 لديه تغييرات كبيرة جداً في طريقة تنظيم الحزم والمكتبة القياسية وسطر الأوامر مقارنة بالإصدار المعاين، نظراً لكثرة المحتوى لن نقدم الكثير من التفاصيل هنا، إذا كنت مهتماً يمكنك التعرف عليها بنفسك من الموقع الرسمي.
pre
قبل الإصدار الرسمي لـ go1، كانت جميع الإصدارات تُسمى إصدارات معاينة، لهذه الإصدارات المعاينة كان المسؤول يُصدر إصدار لقطة أسبوعياً، من بينها الإصدارات المهمة
- r60(2011-09-07)، حدد أن كتلة else يجب أن تكون بين قوسين الآن
- r59(2011-08-01)، صمم مخطط tag هيكلي جديد
- r58(2011-06-29)، أصلح مشكلة إساءة استخدام goto التي أدت إلى عدم تهيئة الذاكرة، أضاف حزم gui، exec
- r57(2011-05-03)، دعم صيغة الإسناد المتعدد للمتغيرات القصيرة، أعاد تصميم حزم http، reflect، جعل gotest برنامج go بدلاً من نص shell
- r56(2011-03-07)، أول إصدار مستقر
بدأ تطوير الإصدارات المعاينة في 09 ديسمبر 2009، وتوقف بعد الإصدار الرسمي لـ go1 في 28 مارس 2012، استمر لقرابة ثلاث سنوات، بعد ذلك لم يعد يتم تسجيل إصدارات اللقطات الأسبوعية. انتقل إلى Pre-Go 1 Release History للتعرف على معلومات هذه الإصدارات الرئيسية، انتقل إلى Weekly Snapshot History للتعرف على معلومات جميع إصدارات اللقطات الأسبوعية للإصدارات المعاينة.
