go語言如何編寫一個單詞轉換命令列工具

效果演示

說明

本工具的底層依賴是github。com/spf13/cobra

本工具目前具備以下功能

單詞全大寫

下劃線命名法轉小駝峰命名法

下劃線命名法轉大駝峰命名法

駝峰命名法轉下劃線命名法

使用步驟

第一步:引入github。com/spf13/cobra

第二步:例項化命令執行物件var rootCmd = &cobra。Command{}

第三步:建立Execute方法:rootCmd。Execute()

第四步:在init()方法中新增自定義的單詞命令rootCmd。AddCommand(wordCmd)

第五步:建立單詞轉換子命令var wordCmd = &cobra。Command

第六步:初始化單詞命令入參wordCmd。Flags()。StringVarP(&str, “str”, “s”, “”, “請輸入單詞內容”)

第七步:編譯,執行

目錄結構

原始碼(全部)

cmd/root。go

package cmdimport ( “github。com/spf13/cobra”)var rootCmd = &cobra。Command{}func Execute() error { return rootCmd。Execute()}func init() { rootCmd。AddCommand(wordCmd)}

cmd/word。go

package cmdimport ( “log” “strings” “gotool/internal/word” “github。com/spf13/cobra”)// 列舉值const ( ModeUpper = iota + 1 //全部單詞轉大寫 ModeLower //全部單詞轉小寫 ModeUnderscoreToUpperCamelCase //下劃線單詞轉大駝峰單詞 ModeUnderscoreToLowerCamelCase //下劃線單詞轉小駝峰單詞 ModeCamelCaseToUnderscore //駝峰單詞轉下劃線單詞)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 world 檢視幫助文件”) } log。Printf(“輸出結果:%s”, content) },}var str stringvar mode int8//命令列引數的設定和初始化func init() { // 引數1:變數, 引數2:命令標誌,引數3:命令標誌簡寫,引數4:引數預設值,引數5:使用說明 wordCmd。Flags()。StringVarP(&str, “str”, “s”, “”, “請輸入單詞內容”) wordCmd。Flags()。Int8VarP(&mode, “mode”, “m”, 0, “請輸入單詞轉換的模式”)}

internal/word/word。go

package wordimport ( “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

// main。gopackage mainimport ( “log” “gotool/cmd”)// 對命令列引數進行解析和繫結func main() { err := cmd。Execute() if err != nil { log。Fatalf(“cmd。Execute err: %v”, err) }}

打包方法

# 模組化go mod init gotool# 下載依賴go mod tidy# 編譯go build

執行方法

$ 。/gotool help worldUnknown help topic [`world`]Usage: [command]Available Commands: help Help about any command word 單詞格式轉換Use “ [command] ——help” for more information about a command。$ 。/gotool word -s=hello_world -m=12021/04/18 16:25:23 輸出結果:HELLO_WORLD$ 。/gotool word -s=hello_world -m=22021/04/18 16:25:26 輸出結果:hello_world$ 。/gotool word -s=hello_world -m=32021/04/18 16:25:28 輸出結果:HelloWorld$ 。/gotool word -s=hello_world -m=42021/04/18 16:25:30 輸出結果:helloWorld$ 。/gotool word -s=hello_world -m=52021/04/18 16:25:32 輸出結果:hello_world$ 。/gotool word -s=hello_world -m=62021/04/18 16:25:34 暫不支援該轉換模式,請執行 help world 檢視幫助文件