קריאת ארגומנטים משורת הפקודה

Go:
קריאת ארגומנטים משורת הפקודה

איך לעשות:

Go מספקת גישה ישירה לארגומנטים משורת הפקודה דרך החבילה os, באופן ספציפי באמצעות os.Args, מערך של מחרוזות. הנה דוגמה פשוטה להתחלה:

package main

import (
    "fmt"
    "os"
)

func main() {
    // os.Args מספקת גישה לארגומנטים גולמיים משורת הפקודה
    fmt.Println("ארגומנטים משורת הפקודה:", os.Args)

    if len(os.Args) > 1 {
        // חצייה על הארגומנטים, דילוג על הראשון (שם התוכנית)
        for i, arg := range os.Args[1:] {
            fmt.Printf("ארגומנט %d: %s\n", i+1, arg)
        }
    } else {
        fmt.Println("לא סופקו ארגומנטים משורת הפקודה.")
    }
}

פלט לדוגמה כאשר מריצים עם go run yourprogram.go arg1 arg2 יכול להיראות כך:

ארגומנטים משורת הפקודה: [/tmp/go-build123456789/b001/exe/yourprogram arg1 arg2]
ארגומנט 1: arg1
ארגומנט 2: arg2

זה מדפיס את כל הארגומנטים כולל שם התוכנית (לרוב באינדקס 0), ואז עובר על כל ארגומנט שניתן, ומדפיס אותם. לצורך פרסור ארגומנטים מבוקר יותר, כדאי לשקול את החבילה flag לפרסור אפשרויות משורת הפקודה.

טבילה עמוקה

באופן היסטורי, גישה לארגומנטים משורת הפקודה היא מסורת כמו תכנות ב-C, שם argc ו-argv[] משמשים למטרה דומה. ב-Go, os.Args פשוט מאוד אך במכוון ראשוני. לתרחישים מורכבים יותר, כמו התמודדות עם דגלים או אפשרויות, Go מציעה את החבילה flag שמספקת יכולת פרסור עמידה בפני תוקפים. זו עשויה להיכנס כאלטרנטיבה “טובה יותר” כאשר היישום שלך דורש יותר מאשר רק ארגומנטים עמדתיים.

בניגוד לחלק משפות התסריט שמציעות פרסור מובנה של ארגומנטים משורת הפקודה למערכים המורכבים או אובייקטים, הגישה של Go דורשת ממתכנתים לטפל בפרסור בעצמם באמצעות os.Args לצרכים בסיסיים או להשתמש בחבילה flag לתרחישים מתקדמים יותר. עיצוב זה משקף את פילוסופיית Go של שמירה על שפת הליבה פשוטה תוך הצעת ספריות סטנדרטיות חזקות למשימות נפוצות. על אף שזה עשוי להציג עקומת למידה מסוימת למי שמורגל בפרסור מובנה, זה מציע גמישות רבה יותר ומעודד הבנה עמוקה יותר של טיפול בארגומנטים משורת הפקודה.