开发CLI工具(使用go语言)

2022-02-02  本文已影响0人  东南枝下

go可以交叉编译成linux、win、mac系统的二进制文件,很适合用于开发cli工具。
以下演示开发一个简单的cli工具,使用cobra组件来实现,编写一个简单的Say Hello Demo

初始化项目

使用go modules来管理包。所以需要先开启,并且切换国内代理,不然依赖可能拉不下来

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.io,direct

初始化工程

go mod init gitee.com/jenson343/jtoolkit

拉取cobra

go get -u github.com/spf13/cobra@v1.0.0

编写子命令

cobra 可以编写子命令,子命令便于区分不同的功能,方便用于开发工具集CLI
在项目根目录下创建cmd目录,并编写子命令代码hello.go

mkdir cmd
touch hello.go
package cmd

import (
    "fmt"
    "github.com/spf13/cobra"
    "strings"
)

var helloCmdDesc = strings.Join([]string{
    "该子命令用于测试cobra命令行组件,参数如下:",
    "-n:名称,输出 hello xxx",
}, "\n")

// 接收输入参数
var hcName string

var helloCmd = &cobra.Command{
    Use:   "hello",
    Short: "say hello",
    Long:  helloCmdDesc,
    Run: func(cmd *cobra.Command, args []string) {
        fmt.Println("hello " + hcName)
    },
}

func init() {
    helloCmd.Flags().StringVarP(&hcName, "name", "n", "warrior", "输入名称")
}

添加子命令

在init函数中将子命令加入根命令中

touch root.go
package cmd

import "github.com/spf13/cobra"

var rootCmd = &cobra.Command{}

func Execute() error {
    return rootCmd.Execute()
}

func init() {
    rootCmd.AddCommand(helloCmd)
}

在main函数中调用命令

touch main.go
package main

import (
    "gitee.com/jenson343/jtoolkit/cmd"
    "log"
)

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

测试

localhost:jtoolkit Jenson$ go run main.go hello -n jenson
hello jenson
localhost:jtoolkit Jenson$ go run main.go hello --name jenson
hello jenson
localhost:jtoolkit Jenson$ 

gitee: gitee.com/jenson343/jtoolkit

上一篇 下一篇

猜你喜欢

热点阅读