Skip to content

golang cobra: 在沒有添加任何參數的情況下預設產生 help message

davidlei

問題描述

最近用 cobra 寫一個簡單的 command line 工具,過程中遇到一個之前沒想過的問題,記錄在這裡。

一般來說,用 cobra 寫的程式要顯示使用說明,都需要加上 --help 參數,如圖:

不過我注意到 golangci-lint 同樣是用 cobra 寫的,卻可以在不加任何參數的情況下自動顯示說明:

找了一下資料,發現解法其實很簡單。

解決方法

一般介紹 cobra 的教學文章都會先建立一個 rootCmd,作為整個 CLI 應用的入口,其他子指令再用

rootCmd.AddCommand(功能名稱)

的方式掛上去。

解法很直覺:在 rootCmdRun 函式裡判斷 args 長度是否為零,如果是就呼叫預設的 Help function:

var rootCmd = &cobra.Command{
	Use:   "leit",
	Short: "A calendar application in command line.",
	Long:  doc,
	Run: func(cmd *cobra.Command, args []string) {
		if len(args) == 0 {
			_ = cmd.Help()
		}
	},
}

重新編譯後:

可以看到,在沒有加任何參數的情況下也會自動顯示 help 內容了。

Edit this post
Previous
備份 vscode 環境紀錄
Next
C Function Pointer 基礎用法整理