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).
بعض الحقائق:
- إصدارات سلسلة الأدوات <= 1.12.17 لا يمكن بناؤها بإصدارات سلسلة أدوات >= 1.16؛
- إصدارات سلسلة الأدوات <= 1.5.4 لا يمكن بناؤها بإصدارات سلسلة أدوات >= 1.6؛
- يلزم إصدار سلسلة أدوات 1.17.13+ لبناء إصدارات سلسلة أدوات 1.20+؛
- يلزم إصدار سلسلة أدوات 1.20.14+ لبناء إصدارات سلسلة أدوات 1.22+.
- يلزم إصدار سلسلة أدوات 1.22.6+ لبناء إصدارات سلسلة أدوات 1.24+.
- يلزم إصدار سلسلة أدوات 1.24.0+ لبناء إصدارات سلسلة أدوات 1.26+.
حالياً، يستخدم GoTV افتراضياً سلسلة الأدوات المحدَّدة في متغير البيئة PATH كإصدار إقلاع ذاتي. وإذا كان متغير البيئة GOROOT_BOOTSTRAP معيَّناً، فستُستخدم قيمته.
في المستقبل، قد يزيل GoTV الحاجة إلى إصدار آخر مبني مسبقاً من سلسلة الأدوات.