2016-08-02 32 views
1

我正在使用github.com/spf13/cobra包來解釋進程的命令行參數,並且我很難理解如何確定參數值。使用github.com/spf13/cobra獲取參數值

我有一個工作程序(下面),其使用的是獲得與參數值來更新內部變量:

OptPort := 8088 

rootCmd := &cobra.Command{ 
    Use: "server", 
    Short: "Root command short version", 
    Long: "Root command long version", 
} 

startCmd := &cobra.Command{ 
    Use: "start", 
    Short: "Start command short version", 
    Long: "Start command long version", 
    Run: func(cmd *cobra.Command, args []string) { 
     fmt.Println("args: " + strings.Join(args, " ")) 
     fmt.Println("port: " + OptPort) 
    }, 
} 
startCmd.Flags().IntVarP(&OptPort, "port", "p", OptPort, "Port to listen to") 

rootCmd.AddCommand(startCmd) 

rootCmd.Execute() 

我得到的輸出如下所示:

args: 
port: 8088 

我知道我可以通過詢問端口變量來獲取端口值,但我會認爲這些值也會在args變量中。 args變量是空的,因爲我做錯了什麼?如果args變量被預期爲空,那麼args變量的目的是什麼?

回答

1

args變量用於傳遞到該特定cobra動詞的額外參數。例如,如果你想在server命令你start動詞(例如)需要一個特定的配置文件,你可以簡單地通過在像

server start -p 8080 config.yml

"config.yml"被放置在args[0]