在 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]
說明
- 定義引數:使用
flag.String
、flag.Int
等函式定義命令列引數。 - 解析引數:使用
flag.Parse()
解析命令列引數。 - 使用引數:透過解引用指標(如
*name
)來獲取引數的值。 - 剩餘引數:可以使用
flag.Args()
獲取解析後的剩餘非標誌引數。