Cobra 是一個強大的 Go 命令行界面 (CLI) 框架,它可以簡化 CLI 程序的開發過程。
# 安裝
你可以使用以下命令安裝 Cobra:
go get -u github.com/spf13/cobra |
# 基本用法
Cobra 的核心是 cobra.Command
結構體,它表示一個 CLI 命令。下面是一個簡單的例子:
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/spf13/cobra" | |
) | |
func main() { | |
var rootCmd = &cobra.Command{ | |
Use: "myapp", | |
Short: "A brief description of your application", | |
Run: func(cmd *cobra.Command, args []string) { | |
// Do Stuff Here | |
}, | |
} | |
if err := rootCmd.Execute(); err != nil { | |
fmt.Println(err) | |
os.Exit(1) | |
} | |
} |
在這個例子中,我們定義了一個名為 rootCmd
的 cobra.Command
結構體,它是應用程序的根命令。 Run
函數定義了當用戶執行 myapp
命令時,程序應該執行的操作。
# 子命令
Cobra 支持定義子命令,以創建更複雜的 CLI 程序。下面是一個包含子命令的例子:
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/spf13/cobra" | |
) | |
func main() { | |
var rootCmd = &cobra.Command{ | |
Use: "myapp", | |
Short: "A brief description of your application", | |
} | |
var versionCmd = &cobra.Command{ | |
Use: "version", | |
Short: "Print the version number of myapp", | |
Run: func(cmd *cobra.Command, args []string) { | |
fmt.Println("myapp version 1.0.0") | |
}, | |
} | |
rootCmd.AddCommand(versionCmd) | |
if err := rootCmd.Execute(); err != nil { | |
fmt.Println(err) | |
os.Exit(1) | |
} | |
} |
在這個例子中,我們定義了一個名為 versionCmd
的子命令,它打印應用程序的版本號。我們使用 rootCmd.AddCommand(versionCmd)
將子命令添加到根命令中。
# 參數和標誌
Cobra 還支持定義命令行參數和標誌。下面是一個示例:
package main | |
import ( | |
"fmt" | |
"os" | |
"github.com/spf13/cobra" | |
) | |
func main() { | |
var name string | |
var rootCmd = &cobra.Command{ | |
Use: "myapp", | |
Short: "A brief description of your application", | |
Run: func(cmd *cobra.Command, args []string) { | |
fmt.Printf("Hello, %s!\\n", name) | |
}, | |
} | |
rootCmd.Flags().StringVarP(&name, "name", "n", "world", "Name to say hello to") | |
if err := rootCmd.Execute(); err != nil { | |
fmt.Println(err) | |
os.Exit(1) | |
} | |
} |
在這個例子中,我們定義了一個名為 name
的字符串參數,並使用 rootCmd.Flags().StringVarP
將其添加到根命令中。用戶可以使用 --name
或 -n
標誌來設置要問候的名稱。
# 總結
Cobra 是一個功能強大且易於使用的 Go CLI 框架,它可以顯著簡化 CLI 程序的開發過程。它支持子命令、參數和標誌,並提供了許多其他有用的功能,如自動生成 bash 自動完成代碼和 man 頁面。如果你正在開發 Go CLI 應用程序,Cobra 絕對值得一試。