golangci-lint لـ Go: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ما هو golangci-lint ولماذا تحتاجه؟

golangci-lint ليس مجرد مكتبة عادية، بل هو أداة تجميع قوية لأدوات التحليل الثابت (linters) في لغة البرمجة Go. إنها أداة موحدة تقوم بتشغيل العديد من أدوات التحليل الثابت الشهيرة في وقت واحد، وتجمع نتائجها في تقرير واحد واضح. باختصار، هي "أداة linting للأدوات الأخرى".

لماذا تحتاجها؟ في تطوير Go الحديث، الحفاظ على جودة الكود هي مهمة بالغة الأهمية. أدوات linting المنفصلة مثل vet و staticcheck و errcheck و gocyclo وعشرات الأدوات الأخرى، ولكل منها إعداداته الخاصة، يمكن أن تحول إعداد CI/CD إلى كابوس. golangci-lint يحل هذه المشكلة من خلال توفير:

  • نقطة دخول موحدة: أمر واحد يشغل جميع أدوات linting التي قمت بإعدادها.
  • تشغيل متوازي: يتم تشغيل أدوات linting بالتوازي، مما يسرع عملية التحليل بشكل كبير.
  • التخزين المؤقت: يتم تخزين النتائج مؤقتًا، مما يجعل عمليات التشغيل المتكررة (مثل تغيير ملف واحد فقط) شبه فورية.
  • إعدادات مرنة: سهولة تفعيل/تعطيل أدوات linting، وتعديل سلوكها من خلال ملف YAML أو وسائط سطر الأوامر.
  • التكامل مع بيئات التطوير و CI/CD: مدعوم من معظم بيئات التطوير الحديثة (VS Code, GoLand) وأنظمة التكامل المستمر (GitHub Actions, GitLab CI, Jenkins).

استخدام golangci-lint يساعد الفرق على اكتشاف الأخطاء المحتملة، والمشاكل الأسلوبية، والكود غير المستخدم، ومشاكل الأداء والأمان تلقائيًا في المراحل المبكرة من التطوير، مما يؤدي إلى كود أكثر موثوقية وقابلية للصيانة.

تثبيت golangci-lint

على عكس مكتبات Go العادية، يتم تثبيت golangci-lint كملف تنفيذي ثنائي، وليس استيراده في الكود. هناك عدة طرق للتثبيت:

1. التثبيت السريع (موصى به لـ CI/CD)

الطريقة الأسهل والأكثر تفضيلاً هي استخدام سكريبت التثبيت:

curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.59.1

ملاحظة: استبدل v1.59.1 بأحدث إصدار من GitHub Releases.

2. التثبيت عبر go install

إذا كان لديك Go الإصدار 1.21 أو أحدث:

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

3. التثبيت عبر مديري الحزم (macOS/Linux)

macOS (Homebrew):

brew install golangci-lint

Linux (Snap):

sudo snap install golangci-lint --classic

4. التحقق من التثبيت

بعد التثبيت، تحقق من أن كل شيء يعمل:

golangci-lint --version

يجب أن ترى شيئًا مثل: golangci-lint has version 1.59.1 built from ...

بداية سريعة مع مثال كود

لنقم بإنشاء مشروع Go بسيط وتشغيل golangci-lint عليه.

الخطوة 1: إنشاء المشروع

mkdir my-lint-project
cd my-lint-project
go mod init my-lint-project

الخطوة 2: كتابة كود "سيء"

قم بإنشاء ملف main.go:

package main

import (
    "fmt"
    "io/ioutil" // deprecated
    "log"
)

var unusedGlobalVar = 42 // متغير غير مستخدم

func main() {
    x := 10 // متغير غير مستخدم
    fmt.Println("Hello")
    readFile("test.txt")
}

func readFile(path string) {
    data, err := ioutil.ReadFile(path) // الخطأ لم يتم التعامل معه
    if err != nil {
        log.Fatal(err)
    }
    _ = data
}

الخطوة 3: تشغيل أداة linting

توصيات