使用go 制作自己的命令行工具

为了方便工作中一些经常进行的操作我们都会写成工具来方便使用,今天我们就用go来实现一个命令行工具。
目的是在当前文件夹下build一个项目类似这种当然其中的go结尾文件都是自己加进去的:
使用go 制作自己的命令行工具
文章图片

使用到的框架:

github.com/urfave/cli/v2

文档地址:https://github.com/urfave/cli/blob/master/docs/v2/manual.md
【使用go 制作自己的命令行工具】效果图:
使用go 制作自己的命令行工具
文章图片

按照文档中解释以及demo选择自己需要的功能,详情查看注释即可:
github : https://github.com/zhumengyifang/golangtool
main.go:
package mainimport ( "buildgoprogram/internal" "fmt" "github.com/urfave/cli/v2" "log" "os" )/** 为了方便修改一些值定义成常量 */ const title = "Build Go Program" const usage = "Automatic directory creation" const version = "1.0.1"/** 初始化 */ func main() { app := &cli.App{ Name:title, Usage:usage, Version: version, Action:buildAction,Commands: buildCommand(), } err := app.Run(os.Args) if err != nil { log.Fatal(err) } }/** 具体命令执行的操作 */ func buildCommand() []*cli.Command { return []*cli.Command{ { //命令 名 Name:"build", //命令 其他触发方式 Aliases: []string{"b"}, //命令 介绍 Usage:"Automatic directory creation", // 命令触发方法 Action:internal.BuildProgram, }, { Name:"time", Aliases: []string{"t"}, Usage:"Print Time", Action:internal.PrintTime, }, } }/** 未输出命令执行 */ func buildAction(c *cli.Context) error { fmt.Println("Welcome to use!") return nil }

buildProgram.go:
package internalimport ( "bytes" "fmt" "github.com/urfave/cli/v2" "os/exec" )/** 方便进行其他build选项 */ func BuildProgram(c *cli.Context) error { parameter := c.Args().First() switch parameter { case "default": return defaultBuild(c) default: return defaultBuild(c) } return nil }/** 基础build 只创建 api build cmd deployments docs examplesinternal scripts tools web 文件夹 每个目录的介绍: https://blog.csdn.net/weixin_40165163/article/details/103255972 */ func defaultBuild(c *cli.Context) error { err := pwd() if err != nil { return err } cmdStr := "mkdir api build cmd deployments docs examplesinternal scripts tools web" err = mkdir(cmdStr) if err != nil { return err } fmt.Println("successful") return nil }/** 输出当前所在目录 */ func pwd() error { cmd := exec.Command("sh", "-c", "pwd") opBytes, err := cmd.Output() if err != nil { return err } fmt.Println(string(opBytes)) return nil }/** 创建所有文件夹 */ func mkdir(cmdStr string) error { if cmdStr == "" { return nil } fmt.Println(cmdStr) cmd := exec.Command("sh", "-c", cmdStr) var stderr bytes.Buffer err := cmd.Run() if err != nil { fmt.Println(fmt.Sprint(err) + ": " + stderr.String()) return err } return nil }

cliTime.go:
package internalimport ( "fmt" "github.com/urfave/cli/v2" "time" )/** 打印当前时间 当时写的一个demo */ func PrintTime(c *cli.Context) error { now := time.Now() fmt.Printf("当前时间:%d-%d-%dT %d:%d:%d\n", now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second()) return nil }


    推荐阅读