go cobra CLI工具库的简单入门
2023-02-25 18:22:19 时间
下载:go install github.com/spf13/cobra-cli@latest
执行init创建一个初始项目:cobra-cli init
发现多了个cmd/root.go
和main.go
我们这里先不看root.go,先添加一个可用命令test。cobra-cli add test
把默认的注释去掉后,然后添加获取输入的参数。
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
var testCmd = &cobra.Command{
Use: "test",
Short: "我是test命令的简要描述",
Long: `我是test命令的长描述,我负责测试。可以把你输入的参数进行输出。`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("我是test,我被调用了")
//获取test命令的输入,这里必须是长命令test,而不能是短命令t
getString, err := cmd.PersistentFlags().GetString("test")
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("我成功拿到了%s命令", getString)
}
},
}
func init() {
rootCmd.AddCommand(testCmd)
//添加长命令test和短命令t,需要注意的是短命令这里只能是单个字符
//StringP("长命令", "短命令", "默认值", "参数描述")
testCmd.PersistentFlags().StringP("test", "t", "", "我是全局测试")
}
go build
之后运行当前目录下的生成的exe程序,exe程序和项目名一致。
直接运行,不带参数,可以发现我们自己添加进去的test命令和其对应的简要描述。
运行test命令,查看其help。发现test的长描述,说明了test的功能是负责把用户的输入进行输出。并且输入的参数名是-t
或者是--test
因此我们可以输入test -t [参数值]
或者test --test [参数值]
来输出用户的输入。
我们还可以进行命令的嵌套,比如这里在上面的test.go
文件下面写多一个test2命令
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
var testCmd1 = &cobra.Command{
Use: "test1",
Short: "我是test1命令的简要描述",
Long: `我是test1命令的长描述,我负责测试。可以把你输入的参数进行输出。`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("我是test1,我被调用了")
//获取test参数的输入,这里必须是长参数test,而不能是短参数t
getString, err := cmd.PersistentFlags().GetString("test1")
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("我成功拿到了%s命令", getString)
}
},
}
var testCmd2 = &cobra.Command{
Use: "test2",
Short: "我是test2命令的简要描述",
Long: `我是test2命令的长描述,我负责测试。可以把你输入的参数进行输出。`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("我是test2,我被调用了")
//获取test参数的输入,这里必须是长参数test,而不能是短参数t
getString, err := cmd.PersistentFlags().GetString("test2")
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("我成功拿到了%s命令", getString)
}
},
}
func init() {
rootCmd.AddCommand(testCmd1)
rootCmd.AddCommand(testCmd2)
//添加长参数test和短参数t,需要注意的是短参数这里只能是单个字符
//StringP("长参数", "短参数", "默认值", "参数描述")
testCmd1.PersistentFlags().StringP("test", "t", "", "我是全局测试")
testCmd2.PersistentFlags().StringP("test2", "2", "", "我是全局测试")
}
这里需要注意的是,这里输入的test是文件的名字,也就是前面添加命令cobra-cli add test
的命令名字,因为我们就是在test文件下写的两个子命令。
查看test2命令的help
然后再执行
现在回过头来看root.go
内容,同理也是把注释去掉,并且添加中文注释:
package cmd
import (
"github.com/spf13/cobra"
"os"
)
// 在不调用任何子命令的情况下,rootCmd表示基本命令
var rootCmd = &cobra.Command{
Use: "root",
Short: "我是root命令的简要描述",
Long: `我是root命令的长描述。`,
// 由于root这个是主命令,不需要执行什么操作,只原来查看命令的信息的
// 因此我们这里就不添加Run: func(cmd *cobra.Command, args []string) {}来执行功能
}
// 不需要去动他
func Execute() {
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
}
}
func init() {
// 在这里您将定义您的标志和配置设置。Cobra支持持久标志,如果在这里定义,它将是应用程序的全局标志。
// rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.awesomeProject.yaml)")
// Cobra也支持本地标志,它只会在直接调用此操作时运行。
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
然后运行,可以发现长描述和Usage发现了变化
相关文章
- Jgit的使用笔记
- 利用Github Action实现Tornadofx/JavaFx打包
- 叹息!GitHub Trending 即将成为历史!
- 微软软了?开源社区讨论炸锅,GitHub CEO 亲自来答
- GitHub Trending 列表频现重复项,前后端都没去重?
- Photoshop Elements 2021版本软件安装教程(mac+windows全版本都有)
- (ps全版本)Photoshop 2020的安装与破解教程(mac+windows全版本都有)
- (ps全版本)Photoshop cc2018的安装与破解教程(mac+windows全版本,包括2023
- 环境搭建:Oracle GoldenGate 大数据迁移到 Redshift/Flat file/Flume/Kafka测试流程
- 每个开发人员都要掌握的:最小 Linux 基础课
- 来撸羊毛了!Windows 环境下 Hexo 博客搭建,并部署到 GitHub Pages
- 超实用!手把手入门 MongoDB:这些坑点请一定远离
- 【GitHub日报】22-10-09 zustand、neovim、webtorrent、express 等4款App今日上新
- 【GitHub日报】22-10-10 brew、minio、vite、seaweedfs、dbeaver 等8款App今日上新
- 【GitHub日报】22-10-11 cobra、grafana、vue、ToolJet、redwood 等13款App今日上新
- Photoshop 2018 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2017 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2020 下载及安装教程(mac+windows全版本都有,包括最新的2023)
- Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
- 最新版本Photoshop CC2018软件安装教程(mac+windows全版本都有,包括2023