
1.2 单词格式转换
在日常生活和工作中,我们经常会看到一些以单词命名的字符串,然后将其转为各种格式的命名。例如,在程序中,我们原本已经定义了某个命名,但可能需要将其转为一个或多个const常量,这时如果手动一个个地修改,那就太烦琐了,不仅有可能改错,而且工作效率低下。
实际上,我们可以通过编写一个小工具来实现这个功能,一来能够满足自己的需求,二来也能不断迭代,甚至满足一些定制化需求。下面我们就开始打造属于自己的工具集,首先搭建工具的项目架子,然后实现一个工具,使其可以实现多种单词格式转换的功能。
1.2.1 安装Cobra
安装本项目依赖的基础库 Cobra,以便快速搭建 CLI 应用程序。在项目根目录中执行如下命令:

1.2.2 初始化cmd和word子命令
下面对项目目录进行初始化,目录结构如下所示:

在本项目中创建入口文件main.go,并新增三个目录,分别是cmd、internal和pkg。
首先,在cmd目录下新建word.go文件,用于放置单词格式转换的子命令word,并在其中写入如下代码:

然后,在cmd目录下新建root.go文件,用于放置根命令,并在其中写入如下代码:


最后,在启动main.go文件中,写入如下运行代码:

1.2.3 单词转换
在功能上,我们需要对单词转换类型进行编码,具体如下:
● 单词全部转为小写。
● 单词全部转为大写。
● 下画线单词转为大写驼峰单词。
● 下画线单词转为小写驼峰单词。
● 驼峰单词转为下画线单词。
在项目的internal目录下,新建word目录及文件,并在word.go中写入后面的章节代码,目录结构如下所示:

1.单词全部转为小写/大写
把单词全部转为小写或大写的实现方法非常简单,直接调用标准库strings中的ToLower方法或ToUpper方法进行转换即可,其原生方法的作用就是把单词转为小写或大写,代码如下:

2.下画线单词转大写驼峰单词
把以下画线方式命名的单词转为大写驼峰单词的主体逻辑是,把下画线替换为空格字符,然后再把所有字符修改为其对应的首字母大写形式,最后把空格字符替换为空,就可以确保各个部分返回的是首字母大写的字符串了,代码如下:

3.下画线单词转小写驼峰单词
把以下画线方式命名的单词转为小写驼峰单词的主体逻辑是,直接复用大写驼峰单词的转换方法,然后对其首字母进行处理。在该方法中,我们直接将字符串的第一位取出来,然后利用unicode.ToLower进行转换,代码如下:

4.驼峰单词转下画线单词
这里直接使用govalidator库提供的转换方法把大写或小写驼峰单词转为下画线单词。主体逻辑是在将字符转为小写的同时添加下画线。比较特殊的一点在于,如果当前字符不是小写字母、下画线或数字,那么在处理时将对 segment 置空,保证其每一段的区间转换都是正确的,代码如下:

1.2.4 word子命令
在完成了单词的各个转换方法后,我们开始编写 word 子命令,将其对应的方法集成到Command中。打开项目下的cmd/word.go文件,定义目前单词所支持的转换模式枚举值,新增如下代码:

接下来对具体的单词子命进行设置和集成,新增如下代码:


在上述代码中,其核心在于子命令word 的 cobra.Command 调用和设置,其一共包含如下三个常用选项,分别是:
● Use:子命令的命令标识。
● Short:简短说明,在help命令输出的帮助信息中展示。
● Long:完整说明,在help命令输出的帮助信息中展示。
下面我们根据单词转换所需的参数,即单词内容和转换的模式,进行命令行参数的设置和初始化,新增如下代码:

在VarP系列的方法中,第一个参数为需要绑定的变量,第二个参数为接收该参数的完整的命令标志,第三个参数为对应的短标识,第四个参数为默认值,第五个参数为使用说明。
1.2.5 验证
在完成了单词格式转换功能后,我们已经初步拥有一个工具了,下面验证一下此工具的功能是否正确。一般来说,在拿到一个CLI应用程序后,我们会先执行help命令查看其帮助信息,具体如下:

手动验证四种单词转换模式的功能是否正常,具体如下:

1.2.6 小结
作为第一个实战项目,我们基于第三方开源库Cobra和标准库strings、unicode实现了多种模式的单词转换功能,此功能在日常工作中较为实用,因为我们经常需要对输入、输出数据进行各种类型的转换和拼装。