前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 使用命令行库编写命令行程序

go 使用命令行库编写命令行程序

作者头像
solate
发布2019-07-22 17:56:19
1.3K0
发布2019-07-22 17:56:19
举报
文章被收录于专栏:solate 杂货铺solate 杂货铺

命令行程序

go 编写命令行程序

使用 urfave/cli 这个库来编写自己的命令行程序

安装

代码语言:javascript
复制
go get github.com/urfave/cli

GOPATH/bin这个目录添加到本机的PATH目录下

代码语言:javascript
复制
export PATH=$PATH:$GOPATH/bin

例子 (可以查看对应的git)

代码语言:javascript
复制
package main

import (
  "os"

  "github.com/urfave/cli"
)

func main() {
  cli.NewApp().Run(os.Args)
}

下面这个复杂一点

代码语言:javascript
复制
package main

import (
  "os"
  "fmt"

  "github.com/urfave/cli"
)

func main() {
  var language string

  app := cli.NewApp()

  app.Flags = []cli.Flag {
    cli.StringFlag{
      Name:        "lang, l",
      Value:       "english",
      Usage:       "language for the greeting",
      Destination: &language,
    },
  }

  app.Action = func(c *cli.Context) error {
    name := "someone"
    if c.NArg() > 0 {
      name = c.Args()[0]
    }
    if language == "spanish" {
      fmt.Println("Hola", name)
    } else {
      fmt.Println("Hello", name)
    }
    return nil
  }

  app.Run(os.Args)
}

这个在命令里可以敲的有

代码语言:javascript
复制
go run testcli.go
go run testcli.go help
go run testcli.go --lang spanish  //Hola someone
go run testcli.go -l spanish
go run testcli.go -v

解析

App

使用这个包首先需要先创建一个app

代码语言:javascript
复制
app := cli.NewApp()

这个命令程序的基础是基于app这个东西的,在上面可以设置很多在hlep中可以看到的东西

下面测试设置一些,详细可以godoc app

代码语言:javascript
复制
package main

import (
	"github.com/urfave/cli"
	"os"
	"fmt"
)

func checkerr(err error) {
	if err != nil {
		fmt.Printf("Error:%+v\n", err)
		os.Exit(-1)
	}
}

func main() {

	app := cli.NewApp()
	app.Version = "1.0.0"
	app.Name = "app名字"
	app.Usage = "app描述"
	app.UsageText = "描述文本的详细信息,如果没有就是"
	app.ArgsUsage = "参数的描述"

	app.Email = "xxx@qq.com"
	app.Author = "用户名"

	//这个方法就是这个命令已启动会运行什么
	app.Action = func(c *cli.Context) error {
		err := cli.ShowAppHelp(c)  //这个是打印app的help界面
		checkerr(err)
		return nil
	}


	app.Run(os.Args)
}
设置后运行的图
设置后运行的图

修改help 显示的格式

一共可以修改3中help显示方式,

  • App: cli.AppHelpTemplate
  • Command : cli.CommandHelpTemplate
  • Subcommand : cli.SubcommandHelpTemplate

cli.HelpPrinter 这个是最后输出的方法。改了这个那么模板就不起作用了 只会输出修改后的内容

代码语言:javascript
复制
package main

import (
  "fmt"
  "io"
  "os"

  "github.com/urfave/cli"
)

func main() {
  // EXAMPLE: Append to an existing template
  cli.AppHelpTemplate = fmt.Sprintf(`%s

WEBSITE: http://awesometown.example.com

SUPPORT: support@awesometown.example.com

`, cli.AppHelpTemplate)

  // EXAMPLE: Override a template
  cli.AppHelpTemplate = `NAME:
   {{.Name}} - {{.Usage}}
USAGE:
   {{.HelpName}} {{if .VisibleFlags}}[global options]{{end}}{{if .Commands}} command [command options]{{end}} {{if .ArgsUsage}}{{.ArgsUsage}}{{else}}[arguments...]{{end}}
   {{if len .Authors}}
AUTHOR:
   {{range .Authors}}{{ . }}{{end}}
   {{end}}{{if .Commands}}
COMMANDS:
{{range .Commands}}{{if not .HideHelp}}   {{join .Names ", "}}{{ "\t"}}{{.Usage}}{{ "\n" }}{{end}}{{end}}{{end}}{{if .VisibleFlags}}
GLOBAL OPTIONS:
   {{range .VisibleFlags}}{{.}}
   {{end}}{{end}}{{if .Copyright }}
COPYRIGHT:
   {{.Copyright}}
   {{end}}{{if .Version}}
VERSION:
   {{.Version}}
   {{end}}
`

  // EXAMPLE: Replace the `HelpPrinter` func
  cli.HelpPrinter = func(w io.Writer, templ string, data interface{}) {
    fmt.Println("Ha HA.  I pwnd the help!!1")
  }

  cli.NewApp().Run(os.Args)
}

参考

urfave/cli

go语言的命令行库

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 命令行程序
    • 安装
      • 例子 (可以查看对应的git)
        • 解析
          • App
          • 修改help 显示的格式
        • 参考
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档