您的位置:首页 > 编程语言 > Go语言

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

2017-07-06 00:00 330 查看

命令行程序

go 编写命令行程序

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

安装

go get github.com/urfave/cli

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

export PATH=$PATH:$GOPATH/bin

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

package main

import (
"os"

"github.com/urfave/cli"
)

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

下面这个复杂一点

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)
}

这个在命令里可以敲的有

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

app := cli.NewApp()

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

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

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 这个是最后输出的方法。改了这个那么模板就不起作用了 只会输出修改后的内容

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语言的命令行库

PS: 觉得不错的请点个赞吧!! (ง •̀_•́)ง
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  go urfave/cli