乐趣区

关于golang:go练手简单的单词格式转换工具

申明

​ 代码引自书籍《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 main

import (
    "log"
    "tour/cmd"
)

func main() {err := cmd.Execute()
    if err != nil {log.Fatalf("cmd.Execute err: %v", err)
    }
}

go.mod

module tour

go 1.14

require (github.com/spf13/cobra v1.0.0)

cmd – root.go

增加 wordcmd, 也就是 cmd – word.go 中申明的 wordCmd

package cmd

import ("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 cmd

import (
    "github.com/spf13/cobra"
    "log"
    "strings"
    "tour/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: 驼峰转下划线",
}, "\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 word

import (
    "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)
}


退出移动版