命令行应用之cobra
1、文件目录
2、代码
主要分为两步:
1)定义子命令
wordCmd = &cobra.Command{。。。。。。}
2)将子命令添加进根命令
rootCmd.AddCommand(wordCmd)
cmd/word.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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package cmd import ( "log" "strings" cobra "github.com/spf13/cobra" "flag/internal/word" ) const ( ModeUpper = iota + 1 // 全部转大写 ModeLower // 全部转小写 ModeUnderscoreToUpperCamelCase // 下划线转大写驼峰 ModeUnderscoreToLowerCamelCase // 下线线转小写驼峰 ModeCamelCaseToUnderscore // 驼峰转下划线 ) var str string var mode int8 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) }, } func init() { wordCmd.Flags().StringVarP(&str, "str" , "s" , "" , "请输入单词内容" ) wordCmd.Flags().Int8VarP(&mode, "mode" , "m" , 0, "请输入单词转换的模式" ) } |
cmd/root.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | package cmd import ( cobra "github.com/spf13/cobra" ) var rootCmd = &cobra.Command{} func Execute() error { return rootCmd.Execute() } func init() { rootCmd.AddCommand(wordCmd) } |
word/word.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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package word import ( "strings" "unicode" ) func ToUpper(s string) string { return strings.ToUpper(s) } func ToLower(s string) string { return strings.ToLower(s) } func UnderscoreToUpperCamelCase(s string) string { s = strings.Replace(s, "_" , " " , -1) s = strings.Title(s) return strings.Replace(s, " " , "" , -1) } func UnderscoreToLowerCamelCase(s string) string { s = UnderscoreToUpperCamelCase(s) return string(unicode.ToLower(rune(s[0]))) + s[1:] } func CamelCaseToUnderscore(s string) string { var output []rune for i, r := range s { if i == 0 { output = append(output, unicode.ToLower(r)) continue } if unicode.IsUpper(r) { output = append(output, '_' ) } output = append(output, unicode.ToLower(r)) } return string(output) } |
main.go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package main import ( "log" "flag/cmd" ) var name string func main() { err := cmd.Execute() if err != nil { log.Fatalf( "cmd.Execute err: %v" , err) } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码