申明
代码引自书籍 《Go语言编程之旅:一起用Go做我的项目》 作者:陈剑煜 徐新华
局部代码实现上做了调整,达到了本人想要的成果。
性能形容
反对5种单词格局转换, 模式如下:
1: 全副单词转大写
2: 全副单词转小写
3: 下划线转大写驼峰
4: 下划线转小写驼峰
5: 驼峰转下划线
举例:
TimeForFun 应用模式1 转换为 TIMEFORFUN
应用模式2 转换为 timeforfun
time_for_fun 应用模式3 转换为 TimeForFun
应用模式4 转换为 timeForFun
TimeForFun 应用模式5 转换为 time_for_fun
目录构造及代码和简要阐明
目录
tour
cmd
- root.go
- word.go
internal
word
- word.go
- go.mod
- main.go
代码及阐明
main.go
package mainimport ( "log" "tour/cmd")func main() { err := cmd.Execute() if err != nil { log.Fatalf("cmd.Execute err: %v", err) }}
go.mod
module tourgo 1.14require ( github.com/spf13/cobra v1.0.0)
cmd - root.go
增加 wordcmd, 也就是cmd - word.go 中申明的wordCmd
package cmdimport ( "github.com/spf13/cobra")var rootCmd = &cobra.Command{}func Execute() error { return rootCmd.Execute()}func init() { rootCmd.AddCommand(wordCmd)}
cmd - word.go
应用iota自增对各模式赋值,编写word子命令,应用switch进行模式抉择,而后执行对应办法
package cmdimport ( "github.com/spf13/cobra" "log" "strings" "tour/internal/word")const ( ModeUpper = iota + 1 //全副单词转大写 ModeLower //全副单词转小写 ModeUnderscoreToUpperCamelCase //下划线转大写驼峰 ModeUnderscoreToLowerCamelCase //下划线转小写驼峰 ModeCamelCaseToUnderscore //驼峰转下划线)var str stringvar mode int8var desc = strings.Join([]string{ "该子命令反对各种单词格局转换, 模式如下:", "1: 全副单词转大写", "2: 全副单词转小写", "3: 下划线转大写驼峰", "4: 下划线转小写驼峰", "5: 驼峰转下划线",}, "\r\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.UderscoreToUpperCamelCase(str) case ModeUnderscoreToLowerCamelCase: content = word.UderscoreToLowerCamelCase(str) case ModeCamelCaseToUnderscore: content = word.CamelCaseToUdnderscore(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, "请输出转换模式")}
internal - word - word.go
- 全副转化为大写
应用strings.ToUpper办法
- 全副转化为小写
应用strings.ToLower办法
- 下划线单词转为大写驼峰单词
把 '_' 替换为空,而后字符串调用strings.Title办法
- 下划线单词转为小写驼峰单词
调用下面的办法那字符串转为大写驼峰,而后再调用unicode.ToLower转为小写驼峰,再用string办法转为字符串
- 驼峰单词转下划线单词
遍历字符串,先把第一个字符转为小写,而后遇到大写字母就在后面加个 '_' 而后再把大写字母转为小写,直至遍历实现。
package wordimport ( "strings" "unicode")//单词全副转化为大写func ToUpper(s string) string { return strings.ToUpper(s)}//单词全副转化为小写func ToLower(s string) string { return strings.ToLower(s)}//下划线单词转为大写驼峰单词func UderscoreToUpperCamelCase(s string) string { s = strings.Replace(s, "_", " ", -1) s = strings.Title(s) return strings.Replace(s, " ", "", -1)}//下划线单词转为小写驼峰单词func UderscoreToLowerCamelCase(s string) string { s = UderscoreToUpperCamelCase(s) return string(unicode.ToLower(rune(s[0]))) + s[1:] return s}//驼峰单词转下划线单词func CamelCaseToUdnderscore(s string) string { var output []rune for i, r := range s { if i == 0 { output = append(output, unicode.ToLower(r)) } else { if unicode.IsUpper(r) { output = append(output, '_') } output = append(output, unicode.ToLower(r)) } } return string(output)}