مكتبة Go القياسية (Golang): نظرة شاملة

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

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

ابدأ الدورة

مكتبة Go القياسية (Golang): نظرة شاملة



لغة Go (Golang)، التي طورتها Google، تشتهر باختصارها، أدائها العالي، ودعمها المدمج للتزامن. ومع ذلك، فإن إحدى "قواها الخارقة" الرئيسية هي مكتبتها القياسية القوية والمصممة بعناية. على عكس العديد من اللغات الأخرى التي تتطلب تبعيات خارجية لحل المهام الأساسية، توفر Go كل ما هو ضروري "مباشرة من الصندوق". في هذه المقالة، سنقدم نظرة شاملة على الحزم الرئيسية للمكتبة القياسية لـ Go والتي ستكون مفيدة لكل مطور.



1. الإدخال/الإخراج والعمل مع الملفات: الحزم io, os, bufio



حزمة io هي الأساس لجميع عمليات الإدخال/الإخراج. واجهاتها io.Reader و io.Writer هي من أهم التجريدات في Go. في الواقع، يمكن تمثيل أي مصدر بيانات (ملف، اتصال شبكة، سلسلة نصية) كـ Reader، وأي مستقبل كـ Writer.



توفر حزمة os وظائف للتفاعل مع نظام التشغيل: فتح/إنشاء الملفات، قراءة الدلائل، العمل مع متغيرات البيئة.



تضيف حزمة bufio التخزين المؤقت، مما يسرع بشكل كبير قراءة وكتابة كميات كبيرة من البيانات.



package main

import ( "bufio" "fmt" "os")

func main() { // فتح ملف للقراءة file, err := os.Open("example.txt") if err != nil { panic(err) } defer file.Close()

// إنشاء ماسح ضوئي مخزن مؤقتًا scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) }

if err := scanner.Err(); err != nil { fmt.Fprintln(os.Stderr, "خطأ في القراءة:", err) }}


2. العمل مع النصوص والتنسيق: الحزم strings, fmt, strconv



تحتوي حزمة strings على مئات الوظائف المفيدة للعمل مع السلاسل النصية: البحث، الاستبدال، التقسيم، الدمج، إزالة المسافات البيضاء، وأكثر من ذلك بكثير. حزمة strconv مسؤولة عن تحويل السلاسل النصية إلى أرقام (والعكس)، بالإضافة إلى تحليل القيم المنطقية.



حزمة fmt هي "سكين الجيش السويسري" للإخراج المنسق. تنفذ وظائف Printf و Sprintf و Fprintf التي تعمل مع أي أنواع تطبق واجهة Stringer.



package main

import ( "fmt" "strconv" "strings")

func main() { // تقسيم سلسلة نصية parts := strings.Split("a,b,c", ",") fmt.Println(parts) // [a b c]

// تحويل سلسلة نصية إلى رقم num, _ := strconv.Atoi("42") fmt.Printf("الرقم: %d", num) // الرقم: 42

// تنسيق بعرض حقل fmt.Printf("|%10s|%5d|", "مرحبًا", 123)}


3. الشبكات و HTTP: الحزم net, net/http



توفر حزمة net بدائيات منخفضة المستوى للعمل مع TCP/UDP و DNS وعناوين IP. لكن "النجمة" الحقيقية هي حزمة net/http. تسمح لك بإنشاء خوادم وعملاء HTTP كاملين دون أي تبعية خارجية واحدة.



بفضل http.ServerMux المدمج ونهج الوسيطة (middleware)، يمكنك بسهولة توجيه الطلبات، معالجة JSON، إدارة ملفات تعريف الارتباط والجلسات. تُستخدم المكتبة القياسية لـ Go في الإنتاج من قبل عمالقة مثل Docker و Kubernetes و Dropbox.



package main

import ( "encoding/json" "fmt" "net/http")

type Response struct { Message string `json:"message"`}

func helloHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { http.Error(w, "الطريقة غير مدعومة", http.StatusMethodNotAllowed) return }

resp := Response{Message: "مرحبًا، أيها العالم!"} w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(resp)}

func main() { http.HandleFunc("/api/hello", hello

توصيات