Skip to content

سجل تحديثات 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.

على مستوى اللغة

  1. تمت إزالة مفهوم النوع الأساسي (core type) في الأدوية، انظر المقال الرسمي Goodbye core types

المكتبة القياسية

  1. إضافة test/synctest، لاختبار الكود المتزامن
  2. إضافة مكتبة تجريبية encoding/json/v2، تتضمن:
    • encoding/json/v2، سرعة إلغاء التسلسل أسرع بـ 2-10 مرات مقارنة بـ v1، انظر اختبارات الأداء go-json-experiment/jsonbench
    • encoding/json/jsontext، توفر قدرة التفاعل منخفض المستوى مع سلاسل json

سلسلة الأدوات

  1. إصدارات Go اللاحقة ستتضمن كمية قليلة من الأدوات الثنائية المُبنية مسبقاً
  2. go mod أضاف توجيه ignore، لتحديد المجلدات التي يجب على أمر go تجاهلها
  3. go doc -http يمكنه تشغيل خادم http محلي، لعرض توثيق الكود
  4. go vet، أضاف محللي waitgroup و hostport
  5. عند تحديث سطر الأوامر go لإصدار go في go.mod أو go.work، لم يعد يضيف إصدار go toolchain المحدد

وقت التشغيل

  1. GOMAXPROCS في بيئة الحاويات سيكون واعياً لحدود CPU للحاوية

  2. GC تجريبي جديد greenteagc، وحدة الجدولة الأساسية لـ GC تغيرت من object إلى memory span

  3. عندما لا يتم التقاط panic، لم يعد يُطبع بشكل متكرر

    panic: PANIC [recovered]
      panic: PANIC

    أصبح

    panic: PANIC [recovered, repanicked]
  4. إضافة runtime/trace.FlightRecorder، قادرة على التقاط معلومات تنفيذ وقت التشغيل بشكل مستمر بطريقة أخف

المجمع

  1. إصلاح خطأ فحص المؤشر الفارغ المؤجل في 1.21 (التأخير حتى بعد فحص الأخطاء)، الكود التالي الذي يبدو به مشكلة واضحة، كان يعمل بشكل طبيعي قبل إصدار 1.25

    go
    package main
    
    import "os"
    
    func main() {
    	f, err := os.Open("nonExistentFile")
    	name := f.Name()
    	if err != nil {
    		println("should panic") // قبل 1.25 كان سيُخرج هذا السطر
    		return
    	}
    	println(name)
    }
  2. المجمع سيحجز ذاكرة احتياطية أكثر للشرائح الموجودة على المكدس، لتحسين أداء الاستخدام

  3. دعم توليد معلومات تصحيح DWARF5

1.24

الإصدار الأول: 2025-02-11

آخر تحديث: go1.24.6 (2025-08-06)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.24 من خلال Go 1.24 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.24 - Release Patch.

على مستوى اللغة

  1. أسماء مستعارة للأنواع العامة، تسمح بإنشاء أسماء مستعارة للأنواع العامة، هذا مفيد جداً عند الإشارة إلى الأنواع العامة المحددة من قبل أطراف ثالثة، مثلاً

    go
    import (
        "other"
    )
    
    type MyQuque[T any] = other.Queue[T]

المكتبة القياسية

  1. إضافة حزمة weak: توفر مؤشرات ضعيفة (Weak Pointers)، تسمح للكائنات بأن يُشار إليها دون زيادة عدد المراجع، تجنب تسرب الذاكرة الناتج عن التخزين المؤقت، يجب فحص ما إذا كان المؤشر nil قبل الاستخدام
  2. قيود الوصول لنظام الملفات: تقديم نوع os.Root، تقييد عمليات الملفات داخل دليل محدد، تعزيز الأمان
  3. دعم التشفير والتجزئة: إضافة حزم crypto/mlkem، crypto/hkdf، crypto/pbkdf2 و crypto/sha3، تحسين أداء خوارزميات التشفير الحالية
  4. إضافة دالة اختبار الأداء testing.B.Loop، لإجراء اختبارات حلقة بشكل أفضل
  5. encoding/json: إضافة وسم omitzero، دعم تصفية القيم الصفرية بناءً على طريقة IsZero()
  6. strings و bytes: إضافة دوال المكرر (مثل Lines، SplitSeq، FieldsSeq)

وقت التشغيل

  1. إعادة بناء map المدمجة بناءً على Swiss Tables، سرعة الوصول إلى map الكبيرة تحسنت بنسبة 30%، سرعة التكرار تحسنت بنسبة 10%-60%
  2. sync.Map تغير لاستخدام تجزئة Trie المتزامنة (hash-trie) لتحسين الأداء، خاصة في حالات الكتابة المتزامنة
  3. أقفال mutex الداخلية لوقت التشغيل تستخدم تنفيذ spinbit الجديد، تقليل تنافس الأقفال، تحسين الأداء في سيناريوهات التزامن العالي
  4. تحسين استراتيجية تخصيص الكائنات الصغيرة، تقليل تجزئة الذاكرة ووقت توقف GC
  5. إضافة runtime.AddCleanup كبديل لـ runtime.SetFinalizer، دعم تسجيل دوال تنظيف متعددة للكائنات، وتنفيذها بالتتابع في goroutine مستقل

Cgo

  1. دعم التعليقات التوضيحية #cgo noescape و #cgo nocallback، تعلن على التوالي أن دوال C لا تهرب من الذاكرة ولا تستدعي دوال Go، تحسين أداء وقت التشغيل
  2. Cgo الآن سيرفض تجميع الاستدعاءات لدوال C التي لها إعلانات متعددة غير متوافقة، الكشف الصارم عن إعلانات دوال C غير المتوافقة عبر الملفات (مثل void f(int) و void f(double))، تجنب توليد تسلسلات استدعاء خاطئة

سلسلة الأدوات

  1. إدارة تبعيات أدوات الوحدات: من خلال توجيه tool في go.mod لتتبع تبعيات الأدوات، استبدال مخطط الاستيراد الفارغ tools.go التقليدي
  2. الإخراج المنظم: go build و go test يدعمان علامة -json، إخراج نتائج البناء والاختبار بصيغة JSON
  3. تحسينات التجميع والربط: المجمع يحسن كفاءة توليد الكود، الرابط يولد افتراضياً GNU Build ID (منصة ELF) و UUID (macOS)
  4. حظر تجاوز قيود تعريف الطرق لأنواع CGO المولدة من خلال الأسماء المستعارة
  5. go build يضمن تلقائياً معلومات نظام التحكم في الإصدار إلى الملف الثنائي (يدعم -buildvcs=false للتعطيل)
  6. متغير البيئة GOAUTH يدعم مصادقة الوحدات الخاصة
  7. go.mod يدعم توجيه tool لإدارة التبعيات القابلة للتنفيذ، استبدال الاستيراد الفارغ tools.go
  8. إضافة معامل go get -tool وأمر go install tool لإدارة تبعيات أدوات الوحدات
  9. ذاكرة التخزين المؤقت للبناء تدعم التخزين المؤقت الثنائي لـ go run و go tool
  10. objdump يدعم فك التجميع لـ LoongArch و RISC-V و S390X
  11. vet أضاف محلل tests (لكشف أخطاء توقيع دوال الاختبار)

توافق المنصات

  1. macOS: Go 1.24 هو آخر إصدار يدعم macOS 11 Big Sur، Go 1.25 سيتطلب macOS 12+
  2. Windows: وضع علامة على بنية ARM 32-bit على أنها غير مكتملة (GOOS=windows GOARCH=arm)، انظر issue #70705
  3. Linux: تم ترقية متطلبات الحد الأدنى لإصدار النواة إلى 3.2
  4. يتطلب Go 1.22.6+ كسلسلة أدوات تمهيدية

إهمال

  1. math/rand.Seed() أصبحت غير فعالة تماماً، يجب استخدام GODEBUG=randseednop=0 لاستعادة السلوك القديم.
  2. 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.

على مستوى اللغة

  1. for range تدعم دوال المكرر، للمعلومات التفصيلية انظر Go Wiki: Rangefunc Experiment.

    go
    func 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

    هذه ميزة عملية نسبياً، تُستخدم عموماً مع الأدوية.

المكتبة القياسية

  1. إضافة مكتبة قياسية iter، تُعرف وتصف المعلومات التفصيلية حول المكررات

  2. مكتبة maps أضافت عدة دوال مكرر

  3. مكتبة slices أضافت عدة دوال مكرر

  4. إضافة مكتبة structs، توفر القدرة على تعديل خصائص الهياكل، مثل تخطيط الذاكرة

    go
    type Person struct {
      Name string
      Age  int
      _    structs.HostLayout
    }
  5. تحسين تنفيذ المكتبة القياسية time

الرابط

  1. معالجة إساءة استخدام //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

سلسلة الأدوات

  1. إضافة أمر go telemetry لإدارة بيانات القياس عن بعد

1.22

الإصدار الأول: 2024-02-06

آخر تحديث: go1.22.6 (صدر 2024-08-06)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.22 من خلال Go 1.22 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.22 - Release Patch.

على مستوى اللغة

  1. حل مشكلة متغير الحلقة في لغة go

    go
    func 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.

  2. for range الآن يدعم تكرار الأنواع الرقمية، كالتالي

    go
    for i := range 10 {
      fmt.Println(i)
    }

المكتبة القياسية

  1. تحسين التوجيه في المكتبة القياسية net/http

  2. database/sql أضاف نوع عام sql.Null

    go
    type Null[T any] struct {
      V     T
      Valid bool
    }

    الاستخدام كالتالي

    go
    type 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.

على مستوى اللغة

  1. إضافة دالتين مدمجتين min و max، لحساب القيمة الأصغر والأكبر.

  2. إضافة دالة مدمجة clear، لمسح map و slice

  3. تحديث ترتيب تهيئة package

    • ترتيب جميع الحزم حسب مسار الاستيراد
    • تنفيذ متكرر حتى تصبح قائمة الحزم فارغة
    • إيجاد أول حزمة تم تهيئة جميع استيراداتها
    • تهيئة تلك الحزمة وإزالتها من القائمة
  4. تحسين قدرة ودقة استنتاج النوع، خاصة ما يتعلق بالأدوية.

  5. إصدار معاينة لتحسين متغير حلقة for range، هذه مشكلة أزعجت مطوري Go لقرابة عشر سنوات، المسؤول أخيراً سيعمل على حلها، للتفاصيل انظر: LoopvarExperiment · golang/go Wiki (github.com) و Proposal: Less Error-Prone Loop Variable Scoping (googlesource.com)

  6. ضمان أن قيمة إرجاع recover لن تكون nil، إذا كان معامل panic هو nil عند الاستدعاء، فسيتم تشغيل panic آخر، يُرجع *runtime.PanicNilError. للتوافق، عند التجميع ضبط GODEBUG=panicnil=1 للسماح بتمرير nil إلى panic.

المكتبة القياسية

  1. إضافة مكتبة log/slog، توفر مكتبة تسجيل هيكلية قياسية
  2. إضافة مكتبة testing/slogtest، للتحقق من تنفيذ slog.Handler
  3. إضافة مكتبة slices، توفر سلسلة من الدوال العامة للتعامل مع الشرائح.
  4. إضافة مكتبة maps، توفر سلسلة من الدوال العامة للتعامل مع map
  5. إضافة مكتبة cmp، لمقارنة الأنواع المرتبة.

أخرى

  1. go1.21.0 يتطلب على الأقل نظام win10 أو Windows Server 2016 أو أحدث ليعمل على نظام windows، الإصدارات السابقة لم تعد مدعومة.
  2. go1.21.0 يتطلب على الأقل macOS 10.15 Catalina أو أحدث ليعمل، الإصدارات السابقة لم تعد مدعومة.
  3. إضافة دعم تجريبي لـ WebAssembly System Interface، Go لا يزال يستكشف WASM باستمرار.
  4. في 1.20 كان PGO (Profile-guide optimization) تجريبياً (انظر Profile-guided optimization - The Go Programming Language)، في إصدار 1.21 تم تفعيله رسمياً. وجود ملف default.pgo في الحزمة main سيُفعل هذه الميزة، بعد التفعيل قد تتحسن الأداء بنسبة 2%-7%.
  5. عند طباعة مكدس استدعاء وقت التشغيل العميق جداً، من طباعة أول 100 إطار فقط، إلى طباعة أول 50 وآخر 50 إطار.
  6. تحسين أداء استدعاء CGO على منصة Unix، من 1-3 ميكروثانية إلى 100-200 نانوثانية الآن.
  7. في إصدار 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.

على مستوى اللغة

  1. عند تحويل نوع الشريحة إلى مصفوفة، كان يجب سابقاً إلغاء مرجعة مصفوفة المؤشر *(*[4byte])(x) لتجنب العمل على نفس المصفوفة الأساسية مع الشريحة، الآن يمكن كتابتها مباشرة [4]byte(x).
  2. unsafe أضاف دوال SliceData، String، StringData، لبناء وهيكلة قيم الشرائح والسلاسل.

المكتبة القياسية

  1. إضافة مكتبة crypto/ecdh، توفر دعماً لـ ECDH (Elliptic Curve Diffie-Hellman، طريقة تشفير غير متماثلة).
  2. go1.20 وسّع دعم تغليف error، يسمح لـ error بتغليف عدة errors.
  3. إضافة net/http.ResponseContorller، توفر طريقة أوضح وأسهل للاكتشاف لإضافة ضوابط لكل handler.
  4. httputil.ReverseProxy تتضمن دالة Hook جديدة Rewrite، لاستبدال Director Hook السابق.

أخرى

  1. go1.20 هو آخر إصدار يدعم win7، 8، Server2008 و Server2012، الإصدارات المستقبلية لن توفر دعماً.
  2. go1.20 هو آخر إصدار يدعم macOS 10.13 أو 10.14، الإصدارات المستقبلية لن توفر دعماً.
  3. في إصداري 1.18 و 1.19، بسبب ظهور الأدوية، تراجعت سرعة التجميع مقارنة بـ 1.17، سرعة تجميع go1.20 ستتحسن بنحو 10%.
  4. إصدار معاينة PGO (Profile-guided optimization)، هذه تقنية تحسين للمجمع في عالم الحواسيب، يمكنها تحسين أداء وقت التشغيل.
  5. في go1.20، على الأنظمة بدون C toolchains، أمر go يعطل cgo.
  6. دعم جمع ملفات تغطية كود البرنامج، انظر Coverage profiling support for integration tests - The Go Programming Language
  7. تحسينات على 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.

تغييرات مهمة

  1. نموذج الذاكرة يتماشى مع c/c++، مشابه لـ TcMollcate

  2. حزمة sync/atomic الآن توفر أنواعاً أكثر للاستخدام

  3. دعم استخدام دالة runtime/debug.SetMemoryLimit لوضع حد مرن لذاكرة go، في بعض الحالات يمكن تحسين كفاءة استخدام الذاكرة

  4. وقت التشغيل الآن سيختار حجماً مناسباً لتهيئة مساحة ذاكرة المكدس بناءً على متوسط استخدام مكدس goroutine، هذا يمكن تجنب التوسع والتقلص المتكرر للمكدس

1.18

الإصدار الأول: 2022-03-15

آخر تحديث: go1.18.10 (صدر 2023-01-10)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.18 من خلال Go 1.18 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.18 - Release Patch.

على مستوى اللغة

  1. تحديث ثقيل، دعم الأدوية، واجهات مجموعة الأنواع، قيود أنواع المعاملات

أخرى

  1. تحسين سلوك التوسع لدالة append
  2. إضافة حزمة debug/buildinfo، يمكن الحصول على معلومات بناء برنامج go أثناء وقت التشغيل
  3. gofmt الآن يمكنه تنسيق الملفات المصدرية بشكل متزامن

1.17

الإصدار الأول: 2021-08-16

آخر تحديث: go1.17.13 (صدر 2022-08-01)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.17 من خلال Go 1.17 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.17 - Release Patch.

على مستوى اللغة

  1. إضافة دالة unsafe.Add، دعم عمليات المؤشر
  2. إضافة دالة unsafe.Slice، دعم الحصول على مؤشر المصفوفة الأساسية للشريحة
  3. الشرائح الآن يمكن تحويلها إلى نوع مؤشر المصفوفة، []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.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي

  1. إهمال حزمة ioutil
  2. دعم تضمين بعض الملفات الثابتة في البرنامج من خلال توجيه //go:embed
  3. إضافة نوع 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.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي

  1. تحسين كفاءة تخصيص الكائنات الصغيرة

  2. إضافة حزمة time/tzdata، دعم تضمين قاعدة بيانات المنطقة الزمنية في البرنامج بالطريقة التالية، لأن العديد من الأنظمة ليس لديها معلومات بيانات المنطقة الزمنية محلياً.

    go
    improt _ "time/tzdata"
  3. تحسينات كبيرة على رابط go، تقليل استخدام الموارد، وتحسين قوة الكود

  4. في بعض الحالات، السماح بتحويل 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.

على مستوى اللغة

  1. دعم تداخل أنواع واجهات مجموعات الطرق

    go
    type MyIO interface {
      io.WriteCloser
    }

أخرى

  1. إدخال تحسين الترميز المفتوح، تكلفة استدعاء defer انخفضت لتكاد تكون مثل الاستدعاء الأصلي
  2. دعم الاستباق غير المتزامن بين goroutines، الحلقات بدون استدعاءات دوال لن تمنع الجدولة بشكل دائم بعد الآن

1.13

الإصدار الأول: 2019-09-03

آخر تحديث: go1.13.15 (صدر 2020-08-06)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.13 من خلال Go 1.13 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.13 - Release Patch.

على مستوى اللغة

  1. دعم القيم الحرفية للأرقام الأكثر حداثة، مثل

    go
    0b101 // ثنائي
    0o10 // ثماني
    0x1B // ست عشري

    دعم تسطير أسفل السطر لفصل الأرقام لتحسين قابلية القراءة

    go
    10_000

    لاحقة العدد التخيلي i يمكن أن تكون أي رقم ثنائي، عشري، ست عشري، أو عدد عشري

أخرى

  1. قيمة GO111MODULE الافتراضية هي auto
  2. إضافة متغير البيئة GOPRIVATE لدعم مصادر التبعيات الخاصة
  3. إضافة متغير البيئة GOSUMDB
  4. تكلفة استخدام defer انخفضت بنسبة 30%
  5. عند حدوث تجاوز فهرس، panic الآن سيطبع معلومات الفهرس
  6. go سيقوم بالتحقق من الإصدار الدلالي عند تنزيل التبعيات

1.12

الإصدار الأول: 2019-02-25

آخر تحديث: go1.12.17 (صدر 2020-02-12)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.12 من خلال Go 1.12 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.12 - Release Patch.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي

  1. تحسين ملحوظ في أداء مسح الكومة
  2. وقت التشغيل سيحرر الذاكرة المطلوبة من نظام التشغيل بشكل أكثر إيجابية
  3. أوامر تنزيل تبعيات go يمكن استخدامها بشكل آمن متزامن الآن

1.11

الإصدار الأول: 2018-08-24

آخر تحديث: go1.11.13 (صدر 2019-08-13)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.11 من خلال Go 1.11 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.11 - Release Patch.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي

  1. الإصدار الأول لـ GoMod، الفوضى السابقة في إدارة التبعيات ستنتهي
  2. أول دعم تجريبي لـ WASM
  3. وقت التشغيل يتبنى تخطيط كومة متفرق، لم يعد يحد من حجم الكومة

1.10

الإصدار الأول: 2018-02-16

آخر تحديث: go1.10.8 (صدر 2019-01-23)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.10 من خلال Go 1.10 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.10 - Release Patch.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية مهمة، بعض التغييرات المهمة كالتالي

  1. أمر go install الآن يُستخدم فقط لتثبيت وتجميع أدوات سطر الأوامر، لم يعد يُستخدم لتنزيل التبعيات
  2. أمر go get الآن يُستخدم لتنزيل تبعيات الكود المصدري
  3. اختبار go الآن سيخزن نتائج الاختبار مؤقتاً، وسيقوم بتشغيل go vet تلقائياً قبل التشغيل
  4. تقليل ملحوظ للتأخير الناتج عن GC عند نشاطه

1.9

الإصدار الأول: 2017-08-24

آخر تحديث: go1.9.7 (صدر 2018-06-05)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.9 من خلال Go 1.9 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.9 - Release Patch.

على مستوى اللغة

  1. دعم الأسماء المستعارة للأنواع

أخرى

  1. دعم التجميع المتوازي
  2. إضافة sync.Map الآمنة للتزامن

1.8

الإصدار الأول: 2017-02-16

آخر تحديث: go1.8.7 (صدر 2018-02-07)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.8 من خلال Go 1.8 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.8 - Release Patch.

على مستوى اللغة

  1. عند تحويل نوعين من الهياكل، سيتم تجاهل اختلاف tags الهيكل

    go
    func example() {
        type T1 struct {
            X int `json:"foo"`
        }
        type T2 struct {
            X int `json:"bar"`
        }
        var v1 T1
        var v2 T2
        v1 = T1(v2) // الآن قانوني
    }

أخرى

  1. وقت الإيقاف الناتج عن جمع المهملات منخفض إلى 10 ميكروثانية، في معظم الحالات أقل من 100 ميكروثانية (يمكن ملاحظة أن كل إصدار تقريباً go تعمل على تحسين GC)
  2. تكلفة استدعاء defer انخفضت بنحو النصف
  3. تكلفة استدعاء go لـ c انخفضت بنحو النصف
  4. تحسين كشف الاستخدام المتزامن لـ map

1.7

الإصدار الأول: 2016-08-15

آخر تحديث: go1.7.6 (صدر 2017-05-23)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.7 من خلال Go 1.7 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.7 - Release Patch.

تغييرات مهمة

  1. إضافة golang.org/x/net/context إلى المكتبة القياسية
  2. وقت gc قُلّص بشكل كبير مقارنة بـ 1.6
  3. حزمة testing تدعم الاختبارات الفرعية

1.6

الإصدار الأول: 2016-02-17

آخر تحديث: go1.6.4 (صدر 2016-12-01)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.6 من خلال Go 1.6 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.6 - Release Patch.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية، التغييرات المهمة كالتالي

  1. كشف الاستخدام المتزامن لـ map، إذا تم اكتشاف أن map يُستخدم بشكل متزامن سيتم طرح fatal
  2. عند حدوث panic، سيتم طباعة مكدس الاستدعاء لـ goroutine قيد التشغيل فقط
  3. دعم HTTP/2

1.5

الإصدار الأول: 2015-08-19

آخر تحديث: go1.5.4 (صدر 2016-04-12)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.5 من خلال Go 1.5 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.5 - Release Patch.

على مستوى اللغة

  1. عند تهيئة مفاتيح map الحرفية، يُسمح بحذف نوع العنصر

    go
    m := 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",
    }

أخرى

  1. وقت التشغيل والمجمع أُعيدت كتابتهما بالكامل بـ go، لم يعودا يحتويان على أي كود c
  2. دعم جمع المهملات المتزامن، تقليل وقت إيقاف البرنامج بشكل كبير
  3. القيمة الافتراضية لـ GOMAXPROCS أصبحت عدد النوى المنطقية للجهاز
  4. دلالات حزمة internal يمكن تطبيقها في أي مكان، لم تعد مقتصرة على حزم كود go المصدرية
  5. دعم تجريبي لإدارة تبعيات vendor (أخيراً بدأ العمل على معالجة إدارة التبعيات)

1.4

الإصدار الأول: 2014-12-10

آخر تحديث: go1.4.3 (صدر 2015-09-22)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.4 من خلال Go 1.4 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.4 - Release Patch.

على مستوى اللغة

  1. حلقة for range يمكن أن تأخذ معامل تكرار واحد، مثل

    for i := range x {
        ...
    }

    لكن لا يمكن أن لا يوجد أي معامل

  2. عند استدعاء طريقة لنوع مرجع مزدوج، لم يعد يتم إلغاء المرجع تلقائياً

    go
    type T int
    func (T) M() {}
    var x **T
    
    // غير مسموح به
    x.M()

أخرى

  1. قبل 1.4، كان وقت تشغيل go مكتوباً بـ c، الآن كُتب بالكامل بـ go
  2. دعم تغيير اسم الحزمة إلى internal للإشارة إلى أن جميع محتويات الحزمة خاصة وغير قابلة للتصدير

1.3

الإصدار الأول: 2014-06-18

آخر تحديث: go1.3.3 (صدر 2014-09-30)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.3 من خلال Go 1.3 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.3 - Release Patch.

تغييرات مهمة

هذا الإصدار ليس به تغييرات نحوية، بعض التغييرات المهمة كالتالي

  1. نموذج مكدس goroutine تغير من المكدس المقسم إلى المكدس المستمر، تحسين أداء توسع المكدس.
  2. تحسين دقة حكم المؤشر لمجمع المهملات
  3. في map ذات السعة الصغيرة، التكرار سيصبح غير متوقع الترتيب أيضاً
  4. بسبب بعض التحسينات في وقت التشغيل، أداء برنامج go في هذا الإصدار تحسن بشكل ملحوظ

1.2

الإصدار الأول: 2013-12-01

آخر تحديث: go1.2.2 (صدر 2014-05-05)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.2 من خلال Go 1.2 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.2 - Release Patch.

على مستوى اللغة

  1. العمليات على متغير بقيمة nil ستسبب panic

  2. عند تقسيم شريحة، يمكن استخدام معامل ثالث لتحديد سعة الشريحة المقسمة لاستخدام أكثر أماناً للشريحة

    go
    var array [10]int
    slice := array[2:4:4]

أخرى

  1. الحد الأدنى لحجم ذاكرة مكدس goroutine ارتفع من 4KB إلى 8KB

  2. تحديد الحد الأقصى لعدد الخيوط بـ 10000

  3. goroutines طويلة التشغيل سيتم استباقها عند حدوث استدعاء دالة (أول إدخال للاستباض التعاوني)

1.1

الإصدار الأول: 2013-05-13

آخر تحديث: go1.1.2 (صدر 2013-08-13)

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.1 من خلال Go 1.1 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.1 - Release Patch.

على مستوى اللغة

  1. قسمة عدد على 0 كانت سابقاً تسبب panic، في 1.1 أصبحت لا تمر بالتجميع مباشرة.
  2. الطرق يمكن أن تكون قيمة موجودة.
  3. إدخال مفهوم بيان الإنهاء، قواعد إرجاع الدوال أصبحت أكثر مرونة، تعريف بيان الإنهاء - go-spec.

من حيث الأداء

  1. أداء برنامج go المُجمّع بأدوات go1.1 يمكن أن يتحسن بنحو 30%-40%

أخرى:

  1. على أجهزة 64-bit الحد الأقصى لذاكرة الكومة ارتفع إلى عشرات GB
  2. التجميع المتقاطع يعطل cgo افتراضياً

1.0

الإصدار الأول: 2012-03-28

يمكن الاطلاع على سجل التحديثات التفصيلي لإصدار go1.0 من خلال Go 1.0 Release Notes، ويمكن الاطلاع على جميع إصدارات التصحيح التي تم إصدارها خلال فترة صيانته من خلال Go1.0 - Release Patch.

على مستوى اللغة

مقارنة بالإصدار المعاين، أُضيفت الأشياء التالية نحوياً

  1. إضافة دالة مدمجة append، لإضافة عناصر إلى الشرائح

  2. إضافة دالة مدمجة close، لإغلاق القنوات

  3. دلالات مركبة، عند تهيئة عناصر حرفية للشرائح، map، الهياكل، يمكن حذف نوعها، كالتالي

    go
    // تعريف النوع
    holiday1 := []Date{
        Date{"Feb", 14},
        Date{"Nov", 11},
        Date{"Dec", 25},
    }
    
    // حذف النوع
    holiday2 := []Date{
        {"Feb", 14},
        {"Nov", 11},
        {"Dec", 25},
    }
  4. goroutines المستخدمة في دالة init ستبدأ مباشرة، لا تحتاج لانتظار تهيئة جميع الحزم.

  5. إضافة نوع rune، يمثل حرف UTF-8

  6. إضافة واجهة مدمجة error، تمثل نوع الخطأ

  7. إضافة دالة مدمجة delete لحذف أزواج المفتاح-القيمة في map

  8. ترتيب تكرار map باستخدام for range أصبح غير متوقع

  9. دعم الإسناد لعدة متغيرات في نفس الوقت

    a := 1
    b := 2
    a, b = 3, 4
  10. مشكلة إخفاء المتغيرات: عندما يكون للدالة قيم إرجاع مسماة، إذا تم إخفاء أي قيمة إرجاع، فيجب أن تحمل جملة return قيم الإرجاع، وإلا لن يمر التجميع، إليك مثال خطأ

    go
    func 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 غير مخفية هنا.
    }
  11. السماح بنسخ قيم الهياكل التي تحتوي على حقول خاصة

  12. في حالة تكون الهياكل والشرائح من عناصر قابلة للمقارنة، السماح لها أن تكون مفاتيح لـ 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 للتعرف على معلومات جميع إصدارات اللقطات الأسبوعية للإصدارات المعاينة.

Golang تم تحريره بواسطة www.golangdev.cn