تطبيقات ومكتبات

GoTV

GoTV أداة تُستخدم لإدارة واستخدام تثبيتات متعددة متعايشة لإصدارات سلسلة أدوات Go الرسمية بتناغم ويُسر. والاسم اختصار لعبارة Go Toolchain Version.

صفحة المشروع: https://github.com/go101/gotv

تابع @zigo_101 للحصول على آخر أخبار GoTV (وكل أنواع تفاصيل/حقائق/نصائح Go...).

التثبيت

نفّذ


go install go101.org/gotv@latest

لتثبيت GoTV.

تلزم نسخة سلسلة أدوات 1.17+ لإتمام التثبيت. ويمكن إلغاء تثبيت نسخة سلسلة الأدوات بعد تثبيت (pin) نسخة مناسبة من سلسلة الأدوات (انظر أدناه).

الاستخدام

نفّذ gotv دون أي معطيات لعرض رسائل المساعدة.

معظم أوامر gotv بالصيغة التالية:


gotv ToolchainVersion [go-arguments...]

عند تنفيذ أول أمر من هذا القبيل، سيُستنسخ مستودع git الخاص بـ Go (ويستغرق إتمام ذلك عدة دقائق).

قد يكون ToolchainVersion

  • إصداراً رسمياً من Go، مثل 1.17.13 و1.18 و1.19rc1، والتي تعني وسوم الإصدار go1.17.13 وgo1.18 وgo1.19rc1 على التوالي في مستودع git الخاص بـ Go. ملاحظة: - 1.N. تعني أحدث إصدار من 1.N (منذ سلسلة أدوات Go 1.21، تعني 1.N أيضاً أحدث إصدار من 1.N).
  • 1. تعني أحدث إصدار رسمي من Go 1.
  • . تعني أحدث إصدار رسمي من Go.
  • :1.N، وتعني أحدث فرع محلي release-branch.go1.N في مستودع git الخاص بـ Go.
  • :tip، وتعني أحدث فرع محلي master في مستودع git الخاص بـ Go.
  • إصدار تلحقه ! يعني جلب الإصدارات البعيدة أولاً (بتنفيذ gotv fetch-versions).

أمثلة:


$ gotv 1.17. version
[Run]: $HOME/.cache/gotv/tag_go1.17.13/bin/go version
go version go1.17.13 linux/amd64

$ gotv 1.18.3 version
[Run]: $HOME/.cache/gotv/tag_go1.18.3/bin/go version
go version go1.18.3 linux/amd64

$ cat search.go
package main

import "fmt"

func demoFilter(n int) bool {
	return n & 1 == 0;
}

// ابحث عن القيم وأعدها دون إفساد الترتيب.
func search(start, end int)(r []int) {
	var count = 0
	for i, index := start, 0; i <= end; i++ {
		if demoFilter(i) {
			count++
			defer func(value int) {
				r[index] = value
				index++
			}(i)
		}
	}

	r = make([]int, count) // خصّص مرة واحدة فقط
	return
}

func main() {
	fmt.Println(search(0, 9))
}

$ gotv 1.21 run search.go
[Run]: $HOME/.cache/gotv/tag_go1.21.7/bin/go run search.go
[8 6 4 2 0]
$ gotv 1.22 run search.go
[Run]: $HOME/.cache/gotv/tag_go1.22.1/bin/go run search.go
[0 0 0 0 0]

(شيفرة المثال مأخوذة من مقالة المدونة هذه. وتُعرض استخدامات أخرى لـ GoTV هنا.)

جميع أوامر gotv الخاصة:


# زامن مستودع git المحلي لـ Go مع المستودع البعيد
gotv fetch-versions

# اسرد جميع الإصدارات الظاهرة محلياً
gotv list-versions

# ابنِ بعض إصدارات سلسلة الأدوات وخزّنها مؤقتاً
gotv cache-version ToolchainVersion [ToolchainVersion ...]

# أزل بعض إصدارات سلسلة الأدوات من الذاكرة المؤقتة لتوفير مساحة القرص
gotv uncache-version ToolchainVersion [ToolchainVersion ...]

# ثبّت (pin) إصداراً محدَّداً من سلسلة الأدوات عند مسار ثابت
gotv pin-version ToolchainVersion

# ألغِ تثبيت إصدار سلسلة الأدوات المثبَّت حالياً
gotv unpin-version

# عيّن إصدار سلسلة الأدوات الافتراضي (منذ v0.2.1)
gotv default-version ToolchainVersion

# افحص إصدار سلسلة الأدوات الافتراضي (منذ v0.2.1)
gotv default-version

تثبيت إصدار من سلسلة الأدوات

يمكننا استخدام الأمر gotv pin-version لتثبيت (pin) إصدار محدَّد من سلسلة الأدوات عند مسار ثابت. وبعد إضافة المسار الثابت إلى متغير البيئة PATH، يمكننا استخدام أمر go الرسمي مباشرة. وبعد فعل ذلك، يمكن إلغاء تثبيت إصدارات سلسلة الأدوات المثبَّتة بطرق غير GoTV بأمان.

يُنصح الآن بتثبيت (pin) إصدار 1.17+ لأغراض الإقلاع الذاتي (bootstrap). يوضّح المثال التالي كيفية تثبيت إصدار سلسلة أدوات Go 1.17.13:


$ gotv pin-version 1.17.
[Run]: cp -r $HOME/.cache/gotv/tag_go1.17.13 $HOME/.cache/gotv/pinned-toolchain

Please put the following shown pinned toolchain path in
your PATH environment variable to use go commands directly:

	/home/username/.cache/gotv/pinned-toolchain/bin

بعد إضافة المسار المطلوب إلى متغير البيئة PATH، افتح نافذة طرفية جديدة:


$ go version
go version go1.17.13 linux/amd64

سيقوم الأمر gotv pin-version .! بترقية سلسلة الأدوات المثبَّتة إلى أحدث إصدار رسمي (قد يكون إصدار beta أو rc).

تعيين إصدار سلسلة أدوات للإقلاع الذاتي

لبناء إصدار من سلسلة الأدوات، يلزم استخدام إصدار آخر مبني مسبقاً من سلسلة الأدوات في عملية البناء. ويُسمى إصدار سلسلة الأدوات الآخر إصدار الإقلاع الذاتي (bootstrap).

بعض الحقائق:

حالياً، يستخدم GoTV افتراضياً سلسلة الأدوات المحدَّدة في متغير البيئة PATH كإصدار إقلاع ذاتي. وإذا كان متغير البيئة GOROOT_BOOTSTRAP معيَّناً، فستُستخدم قيمته.

في المستقبل، قد يزيل GoTV الحاجة إلى إصدار آخر مبني مسبقاً من سلسلة الأدوات.