golang命令行參數解析


1. os基礎處理

os包中有一個string類型的切片變量os.Args,其用來處理一些基本的命令行參數,它在程序啟動后讀取命令行輸入的參數。參數會放置在切片os.Args[]中(以空格分隔),從索引1開始(os.Args[0]放的是程序本身的名字)。

fmt.Println("Parameters:", os.Args[1:])

 

2. flag參數解析

flag包可以用來解析命令行選項,但通常被用來替換基本常量。例如,在某些情況下希望在命令行給常量一些不一樣的值。

type Flag struct {
    Name     string // name as it appears on command line
    Usage    string // help message
    Value    Value  // value as set
    DefValue string // default value (as text); for usage message
}

flag的使用規則是:首先定義flag(定義的flag會被解析),然后使用Parse()解析flag,解析后已定義的flag可以直接使用,未定義的剩余的flag可通過Arg(i)單獨獲取或通過Args()切片整個獲取。

定義flag

func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Int(name string, value int, usage string) *int
func IntVar(p *int, name string, value int, usage string)

解析flag

func Parse()

Parse() parses the command-line flags from os.Args[1:]. Must be called after all flags are defined and before flags are accessed by the program.

func Arg(i int) string
func Args() []string

Arg returns the i'th command-line argument. Arg(0) is the first remaining argument after flags have been processed.

Args returns the non-flag command-line arguments.

After parsing, the arguments following the flags are available as the slice flag.Args() or individually as flag.Arg(i). The arguments are indexed from 0 through flag.NArg()-1.

func NArg() int

NArg is the number of arguments remaining after flags have been processed.

Flags may then be used directly. If you're using the flags themselves, they are all pointers; if you bind to variables, they're values.

package main
import (
        "fmt"
        "flag"
)

func main(){
        var new_line = flag.Bool("n", false, "new line")
        var max_num int
        flag.IntVar(&max_num, "MAX_NUM", 100, "the num max")

        flag.PrintDefaults()
        flag.Parse()

        fmt.Println("There are", flag.NFlag(), "remaining args, they are:", flag.Args())
        fmt.Println("n has value: ", *new_line)
        fmt.Println("MAX_NJUM has value: ", max_num)
}
$ go build -o flag flag.go
$ ./flag
  -MAX_NUM int
        the num max (default 100)
  -n    new line
There are 0 remaining args, they are: []
n has value:  false
MAX_NJUM has value:  100
$ ./flag -n -MAX_NUM=1000 wang qin
  -MAX_NUM int
        the num max (default 100)
  -n    new line
There are 2 remaining args, they are: [wang qin]
n has value:  true
MAX_NJUM has value:  1000

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM