Cobra
cobra
首先需要安装本项目所依赖的基础库
$ go get -u github.com/spf13/cobra@v1.0.0
tour
├── main.go
├── go.mod
├── go.sum
├── cmd
├── internal
└── pkg
在本项目中,我们创建了入口文件cmd
目录下新建
var wordCmd = &cobra.Command{
Use: "word",
Short: "单词格式转换",
Long: "支持多种单词格式转换",
Run: func(cmd *cobra.Command, args []string) {},
}
func init() {}
接下来还是在
var rootCmd = &cobra.Command{}
func Execute() error {
return rootCmd.Execute()
}
func init() {
rootCmd.AddCommand(wordCmd)
}
最后在启动
func main() {
err := cmd.Execute()
if err != nil {
log.Fatalf("cmd.Execute err: %v", err)
}
}
这里的
const (
ModeUpper = iota + 1 // 全部转大写
ModeLower // 全部转小写
ModeUnderscoreToUpperCamelCase // 下划线转大写驼峰
ModeUnderscoreToLowerCamelCase // 下线线转小写驼峰
ModeCamelCaseToUnderscore // 驼峰转下划线
)
接下来进行具体的单词子命令的设置和集成,继续新增如下代码:
var desc = strings.Join([]string{
"该子命令支持各种单词格式转换,模式如下:",
"1:全部转大写",
"2:全部转小写",
"3:下划线转大写驼峰",
"4:下划线转小写驼峰",
"5:驼峰转下划线",
}, "\n")
var wordCmd = &cobra.Command{
Use: "word",
Short: "单词格式转换",
Long: desc,
Run: func(cmd *cobra.Command, args []string) {
var content string
switch mode {
case ModeUpper:
content = word.ToUpper(str)
case ModeLower:
content = word.ToLower(str)
case ModeUnderscoreToUpperCamelCase:
content = word.UnderscoreToUpperCamelCase(str)
case ModeUnderscoreToLowerCamelCase:
content = word.UnderscoreToLowerCamelCase(str)
case ModeCamelCaseToUnderscore:
content = word.CamelCaseToUnderscore(str)
default:
log.Fatalf("暂不支持该转换模式,请执行 help word 查看帮助文档")
}
log.Printf("输出结果: %s", content)
},
}
在上述代码中,核心在于子命令cobra.Command
调用和设置,其一共包含如下四个常用选项,分别是:
- Use:子命令的命令标识。
- Short:简短说明,在
help 输出的帮助信息中展示。 - Long:完整说明,在
help 输出的帮助信息中展示。
接下来我们根据单词转换所需的参数,分别是单词内容和转换的模式进行命令行参数的设置和初始化,继续写入如下代码:
var str string
var mode int8
func init() {
wordCmd.Flags().StringVarP(&str, "str", "s", "", "请输入单词内容")
wordCmd.Flags().Int8VarP(&mode, "mode", "m", 0, "请输入单词转换的模式")
}
在
$ go run main.go help word
该子命令支持各种单词格式转换,模式如下:
1:全部转大写
2:全部转小写
3:下划线转大写驼峰
4:下划线转小写驼峰
5:驼峰转下划线
Usage:
word [flags]
Flags:
-h, --help help for word
-m, --mode int8 请输入单词转换的模式
-s, --str string 请输入单词内容
手工验证四种单词的转换模式的功能点是否正常,如下:
$ go run main.go word -s=test -m=1
输出结果: TEST