golang 命令列處理

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1.命令列參數(命令列參數是指定程式運行參數的一個常見方式。例如,go run hello.go,程式 go 使用了 run 和 hello.go 兩個參數。)

package mainimport "os"import "fmt"func main() {    //os.Args 提供原始命令列參數訪問功能。注意,切片中的第一個參數是該程式的路徑,並且 os.Args[1:]儲存所有程式的的參數。    argsWithProg := os.Args    argsWithoutProg := os.Args[1:]    //你可以使用標準的索引位置方式取得單個參數的值。    arg := os.Args[3]    fmt.Println(argsWithProg)    fmt.Println(argsWithoutProg)    fmt.Println(arg)}/*要實驗命令列參數,最好先使用 go build 編譯一個可執行二進位檔案$ go build command-line-arguments.go$ ./command-line-arguments a b c d[./command-line-arguments a b c d][a b c d]c*/

2.命令列標誌(使用標記的命令列處理方法,命令列標誌是命令列程式指定選項的常用方式。例如,在 wc -l 中,這個 -l 就是一個命令列標誌。)

package main//Go 提供了一個 flag 包,支援基本的命令列標誌解析。我們將用這個包來實現我們的命令列程式樣本。import "flag"import "fmt"func main() {    //基本的標記聲明僅支援字串、整數和布爾值選項。這裡我們聲明一個預設值為 "foo" 的字串標誌 word並帶有一個簡短的描述。這裡的 flag.String 函數返回一個字串指標(不是一個字串值),在下面我們會看到是如何使用這個指標的。    wordPtr := flag.String("word", "foo", "a string")    //使用和聲明 word 標誌相同的方法來聲明 numb 和 fork 標誌。    numbPtr := flag.Int("numb", 42, "an int")    boolPtr := flag.Bool("fork", false, "a bool")    //用程式中已有的參數來聲明一個標誌也是可以的。注意在標誌聲明函數中需要使用該參數的指標。    var svar string    flag.StringVar(&svar, "svar", "bar", "a string var")    //所有標誌都聲明完成以後,調用 flag.Parse() 來執行命令列解析。    flag.Parse()    //這裡我們將僅輸出解析的選項以及後面的位置參數。注意,我們需要使用類似 *wordPtr 這樣的文法來對指標解引用,從而得到選項的實際值。    fmt.Println("word:", *wordPtr)    fmt.Println("numb:", *numbPtr)    fmt.Println("fork:", *boolPtr)    fmt.Println("svar:", svar)    fmt.Println("tail:", flag.Args())}/*測試這個程式前,最好將這個程式編譯成二進位檔案,然後再運行這個程式。$ go build command-line-flags.goword: optnumb: 7fork: truesvar: flagtail: []注意到,如果你省略一個標誌,那麼這個標誌的值自動的設定為他的預設值。$ ./command-line-flags -word=optword: optnumb: 42fork: falsesvar: bartail: []位置參數可以出現在任何標誌後面。$ ./command-line-flags -word=opt a1 a2 a3word: opt...tail: [a1 a2 a3]注意,flag 包需要所有的標誌出現位置參數之前(否則,這個標誌將會被解析為位置參數)。$ ./command-line-flags -word=opt a1 a2 a3 -numb=7word: optnumb: 42fork: falsesvar: bartrailing: [a1 a2 a3 -numb=7]使用 -h 或者 --help 標誌來得到自動產生的這個命令列程式的協助文本。$ ./command-line-flags -hUsage of ./command-line-flags:  -fork=false: a bool  -numb=42: an int  -svar="bar": a string var  -word="foo": a string如果你提供一個沒有使用 flag 包指定的標誌,程式會輸出一個錯誤資訊,並再次顯示協助文本。$ ./command-line-flags -watflag provided but not defined: -watUsage of ./command-line-flags:...*/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.