GO语言之urfave/cli命令行解析
练习URL:
https://blog.csdn.net/sd653159/article/details/83381786
相信只要部署过线上服务,都知道启动参数一定是必不可少的,当你在不同的网络、硬件、软件环境下去启动一个服务的时候,总会有一些启动参数是不确定的,这时候就需要通过命令行模块去解析这些参数,urfave/cli是Golang中一个简单实用的命令行工具。
通过 go get github.com/urfave/cli 命令即可完成安装。
package main
import (
"fmt"
"log"
"os"
"github.com/urfave/cli"
)
func main() {
//实例化一个命令行程序
oApp := cli.NewApp()
//程序名称
oApp.Name = "GoTool"
//程序的用途描述
oApp.Usage = "To save the world"
//程序的版本号
oApp.Version = "1.0.0"
//预置变量
var host string
var debug bool
//设置启动参数
oApp.Flags = []cli.Flag{
//参数string, int, bool
cli.StringFlag{
Name: "host", //参数名称
Value: "127.0.0.1", //参数默认值
Usage: "Server Address", //参数功能描述
Destination: &host, //接收值的变量
},
cli.IntFlag{
Name: "port, p",
Value: 8888,
Usage: "Server port",
},
cli.BoolFlag{
Name: "debug",
Usage: "debug mode",
Destination: &debug,
},
}
//该程序执行的代码
oApp.Action = func(c *cli.Context) error {
fmt.Println("Test")
fmt.Printf("host=%v \n", host)
fmt.Printf("port=%v \n", c.Int("port")) //不使用变量接收,直接解析
fmt.Printf("debug=%v \n", debug)
return nil
}
//设置多个命令,不同的命令执行不同的操作
oApp.Commands = []cli.Command{
{
//命令全称
Name: "lang",
//命令简写
Aliases: []string{"l"},
//命令详细描述
Usage: "Setting language",
//命令处理函数
Action: func(c *cli.Context) {
//通过c.Args().First()获取命令行参数
fmt.Printf("language=%v \n", c.Args().First())
},
},
{
Name: "encode",
Aliases: []string{"e"},
Usage: "Setting encoding",
Action: func(c *cli.Context) {
fmt.Printf("encoding=%v \n", c.Args().First())
},
},
}
if err := oApp.Run(os.Args); err != nil {
log.Fatal(err)
}
}

GO语言之urfave/cli命令行解析的更多相关文章
- Go语言中的IO操作、Flag包以及urfave/cli命令行框架
一.格式化输入和输出 1.从终端获取用户的输入 fmt.Scanf 空格作为分隔符,占位符和格式化输出的一致 fmt.Scan 从终端获取用户的输入,存储在Scanln中的参数里,空格和换行符作为 ...
- Go语言 命令行解析(一)
命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点!在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用U ...
- Apache Commons CLI命令行启动
今天又看了下Hangout的源码,一般来说一个开源项目有好几种启动方式--比如可以从命令行启动,也可以从web端启动.今天就看看如何设计命令行启动... Apache Commons CLI Apac ...
- .NET:命令行解析器介绍
背景 经常需要开发一下小工具,之前都是自己解析命令行参数,接触过动态语言社区以后,发现命令行解析有特定的模式和框架可以利用,本文介绍一个 .NET 平台的类库. 示例 需求 拷贝文件,如:CopyFi ...
- ThinkPHP3.1.2 使用cli命令行模式运行
ThinkPHP3.1.2 使用cli命令行模式运行 标签(空格分隔): php 前言 thinkphp3.1.2 需要使用cli方法运行脚本 折腾了一天才搞定 3.1.2的版本真的很古老 解决 增加 ...
- golang常用库:cli命令行/应用程序生成工具-cobra使用
golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...
- Python命令行解析argparse常用语法使用简介
查看原文:http://www.sijitao.net/2000.html python中的命令行解析最简单最原始的方法是使用sys.argv来实现,更高级的可以使用argparse这个模块.argp ...
- Noah的学习笔记之Python篇:命令行解析
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- python命令行解析工具argparse模块【1】
argpaser是python中很好用的一个命令行解析模块,使用它我们可以很方便的创建用户友好型命令行程序.而且argparse会自动生成帮助信息和错误信息. 一.示例 例如下面的例子,从命令行中获取 ...
随机推荐
- MySQL索引调优【转】
一.关于查询计划 其实,关于所有的关系型数据库中,在运行T-SQL语句的时候,在查询器进行编译运行的同时,都会有着自己的内部的一个优化过程,而这优化之后的产物就是:执行计划. 在SQL SERVER中 ...
- $Django 数据库图片渲染设计 站点设计 截断函数
1.数据库图片渲染设计 1.模型层 class User_info (AbstractUser): head_img = models.FileField (upload_to='test', def ...
- MybatisGenerator生成的mapper 少了识别主键的方法 byPrimaryKey()
生成的文件缺少红线标注的类似方法 添加 <property name="useInformationSchema" value="true"/>即可 ...
- 14)django-模板(计数器)
模块中for循环自带计数器. 使用场景:表格数据相增加序列号. 问:可以使用表的自增加序列做为序列号,但是这个存在个问题,即表中数据被删除,则会出现序列不连续. 1)每个循环都有6个公共方法,双循环有 ...
- 深入Golang调度器之GMP模型
前言 随着服务器硬件迭代升级,配置也越来越高.为充分利用服务器资源,并发编程也变的越来越重要.在开始之前,需要了解一下并发(concurrency)和并行(parallesim)的区别. 并发: 逻 ...
- 使用VW时,图片的问题
在项目中,使用了VW适配,给图片直接设置了width和height,浏览器模拟正常,在手机上就不显示 解决办法是:在图片外面包一层div,设置width和height,然后图片设置width:100% ...
- mysql·事务挂起
当开启事务后,程序挂了而事务没有提交,那么会被锁住,报错:连接超时,但不影响查询. 下面操作需要权限 一.查询现在被占用的锁信息 select * from information ...
- Android 组件化方案探索与思考
Android 组件化方案探索与思考 组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试. 本项目github地址 https://githu ...
- 基础常用的数据结构 Collection Map
map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map ...
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...