การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ

Go:
การอ่านอาร์กิวเมนต์จากคำสั่งลำดับ

อย่างไร:

Go ให้การเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งโดยตรงผ่านแพ็คเกจ os โดยเฉพาะการใช้ os.Args ซึ่งเป็นอาร์เรย์ของสตริง นี่คือตัวอย่างง่ายๆที่จะเริ่มต้น:

แพ็คเกจหลัก

นำเข้า (
    "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 ทำให้สามารถทำได้ง่ายแต่เ purposely rudimentary สำหรับสถานการณ์ที่ซับซ้อนยิ่งขึ้น เช่น การจัดการธงหรือตัวเลือก Go เสนอแพ็คเกจ flag ซึ่งให้ความสามารถในการแยกวิเคราะห์อย่างเข็มข้น ซึ่งอาจถือว่าเป็นทางเลือกที่ “ดีกว่า” เมื่อแอปพลิเคชั่นของคุณต้องการมากกว่าเพียงแค่อาร์กิวเมนต์ตามตำแหน่ง

ไม่เหมือนกับภาษาสคริปบางภาษาที่ให้การแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งเข้าไปในอาร์เรย์สมาคมหรือวัตถุโดยอัตโนมัติ วิธีการของ Go ต้องการให้โปรแกรมเมอร์จัดการการแยกวิเคราะห์ด้วยตัวเองโดยใช้ os.Args สำหรับความต้องการพื้นฐาน หรือใช้แพ็คเกจ flag สำหรับสถานการณ์ที่ซับซ้อนขึ้น การออกแบบนี้สะท้อนถึงปรัชญาของ Go ที่รักษาให้ภาษาหลักง่าย ขณะที่ให้ไลบรารีมาตรฐานทรงพลังสำหรับงานทั่วไป แม้ว่ามันอาจนำเข้าสู่การเรียนรู้ที่มีหน่อยสำหรับผู้ที่คุ้นเคยกับการแยกวิเคราะห์ในตัว แต่มันก็เสนอความยืดหยุ่นมากขึ้นและส่งเสริมให้มีความเข้าใจเชิงลึกรายละเอียดในการจัดการอาร์กิวเมนต์บรรทัดคำสั่ง