申明

代码引自书籍 《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)}