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
使用这个包首先需要先创建一个appapp := 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/cligo语言的命令行库
PS: 觉得不错的请点个赞吧!! (ง •̀_•́)ง
相关文章推荐
- 使用Java编写基于命令行的程序
- 使用Java编写基于命令行的程序
- 使用go实现基于命令行的计算器程序
- 使用go构建命令行程序的快捷之道
- 题目:使用命令行参数编写一个程序,其功能是将任意一个正整数m变换为指定的n 进制数串输出。命令行的格式为:
- VC++下使用ADO编写数据库程序
- VC++下使用ADO编写数据库程序
- 使用JAVA编写网络通信程序
- 如何使用 VB 编写自动反安装的程序?
- 使用CppUnit编写测试程序
- VC++下使用ADO编写数据库程序
- Linux下,使用C/C++编写一个简单的消息处理程序
- 使用C#编写17种Hello World程序
- 可启动程序编写环境的搭建和使用
- 学习API HOOK,编写了一个winsock 的封包抓取程序,可免费使用;
- [原创]使用Visual Studio .NET编写纯C程序的提示
- mono:直接使用MSIL指令编写mono程序
- VC++下使用ADO编写数据库程序
- 使用C#编写的一个定时关机程序
- 使用MFC编写internet查询程序