Go 接收命令列引數

Undefined443發表於2024-06-09

在 Go 語言中,可以使用標準庫中的 os 包和 flag 包來接收和處理命令列引數。

使用 os

os.Args 是一個字串切片,其中第一個元素是程式的名稱,後續元素是傳遞給程式的命令列引數。

示例程式碼

package main

import (
    "fmt"
    "os"
)

func main() {
    // os.Args[0] 是程式的名稱
    // os.Args[1:] 是傳遞給程式的引數
    args := os.Args[1:]

    if len(args) == 0 {
        fmt.Println("No arguments provided.")
        return
    }

    fmt.Println("Received arguments:")
    for i, arg := range args {
        fmt.Printf("Argument %d: %s\n", i+1, arg)
    }
}

執行方法

假設儲存為 main.go,可以透過以下命令執行:

go run main.go arg1 arg2 arg3

輸出:

Received arguments:
Argument 1: arg1
Argument 2: arg2
Argument 3: arg3

使用 flag

flag 包提供了更強大的命令列引數解析功能,支援帶有預設值和幫助資訊的引數。

示例程式碼

package main

import (
    "flag"
    "fmt"
)

func main() {
    // 定義命令列引數(引數名,預設值,引數說明)
    name := flag.String("name", "World", "a name to say hello to")
    age := flag.Int("age", 0, "your age")

    // 解析命令列引數
    flag.Parse()

    // 使用命令列引數
    fmt.Printf("Hello, %s!\n", *name)
    if *age > 0 {
        fmt.Printf("You are %d years old.\n", *age)
    }

    // 列印剩餘的非標誌引數
    fmt.Println("Remaining arguments:", flag.Args())
}

執行方法

假設儲存為 main.go,可以透過以下命令執行:

go run main.go -name Alice -age 30 additional_arg1 additional_arg2

輸出:

Hello, Alice!
You are 30 years old.
Remaining arguments: [additional_arg1 additional_arg2]

說明

  1. 定義引數:使用 flag.Stringflag.Int 等函式定義命令列引數。
  2. 解析引數:使用 flag.Parse() 解析命令列引數。
  3. 使用引數:透過解引用指標(如 *name)來獲取引數的值。
  4. 剩餘引數:可以使用 flag.Args() 獲取解析後的剩餘非標誌引數。

相關文章