📦 第一步:安装 Cobra CLI 工具
1
| go install github.com/spf13/cobra-cli@latest
|
确保 $GOPATH/bin
在你的 PATH
中,然后你可以运行:
🧱 第二步:初始化项目
创建你的 Go 项目目录:
1 2
| mkdir tasker && cd tasker go mod init github.com/yourname/tasker
|
使用 cobra-cli
初始化:
1
| cobra-cli init --pkg-name github.com/yourname/tasker
|
这会生成如下结构:
1 2 3 4
| tasker/ ├── cmd/ │ └── root.go ├── main.go
|
🚀 第三步:运行项目
在当前目录运行:
输出将会是:
1
| tasker is a CLI application
|
你可以查看帮助:
➕ 第四步:添加子命令
示例:添加 add
命令
编辑 cmd/add.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package cmd
import ( "fmt" "github.com/spf13/cobra" )
var addCmd = &cobra.Command{ Use: "add [task]", Short: "添加一个新任务", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { task := args[0] fmt.Printf("添加任务: %s\n", task) }, }
func init() { rootCmd.AddCommand(addCmd) }
|
现在你可以运行:
1
| go run main.go add "写 Cobra 教程"
|
📋 第五步:添加 list
命令
编辑 cmd/list.go
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package cmd
import ( "fmt" "github.com/spf13/cobra" )
var tasks = []string{}
var listCmd = &cobra.Command{ Use: "list", Short: "列出所有任务", Run: func(cmd *cobra.Command, args []string) { if len(tasks) == 0 { fmt.Println("没有任务") return } for i, task := range tasks { fmt.Printf("%d. %s\n", i+1, task) } }, }
func init() { rootCmd.AddCommand(listCmd) }
|
📝 注意:数据结构在内存中,不持久化。可用 map[string]string
或写入文件模拟更复杂逻辑。
🎛 第六步:添加标志(flags)
比如我们想让 add
命令带一个 --priority
选项:
在 add.go
的 init()
函数中添加:
1
| addCmd.Flags().StringP("priority", "p", "normal", "任务优先级")
|
并在 Run
中读取:
1 2
| priority, _ := cmd.Flags().GetString("priority") fmt.Printf("添加任务: %s(优先级: %s)\n", task, priority)
|
示例运行:
1
| go run main.go add "学习 Go" --priority high
|
🧼 第七步:美化和构建项目
构建可执行文件:
1 2
| go build -o tasker ./tasker --help
|
可以将 tasker
添加到系统 PATH 中,变成全局命令行工具。
📦 最终项目结构
1 2 3 4 5 6 7
| tasker/ ├── cmd/ │ ├── add.go │ ├── list.go │ └── root.go ├── go.mod └── main.go
|