1.命令行参数获取:

命令行获得可通过os.Args参数, 
Args在os中定义为:
var Args []string
官方解释:Args hold the command-line arguments, starting with the program name.

2.命令行解析

golang 对命令行解析提供了flag包,按照功能可以分为以下三类:
1.基本命令解析
2.自定义参数解析
3.解析外部命令字符串

2.1 基本命令解析

命令注册:
通过flag.type(int,string等),提供命令名称, 默认参数值
按照返回值的形式分为两种, 返回值为值的指针, 通过传入指针,解析值后写入传入的指针
命令解析:调用flag.Parse()解析命令行

以bool解析为例子:

func main() {var block bool//如果有-b参数则为真,否则为假//使用./flag -b=false//./flag -b=tureflag.BoolVar(&block, "b", false, "set for block")flag.Parse()fmt.Println("falg", block)
}

2.自定义参数命令解析

自定义变量实现下面的接口:
type Value interface {  
String() string  
Set(string) error 
}
并定义变量,通过flag.Var传入自定义变量

3.解析外部命令字符串

通过flag.NewFlagSet创建flagset.使用返回的set注册标志,调用set.Parse(argv)解析命令行. argv为字符串数组

实现代码如下:

package mainimport ("errors""flag""fmt""strings""time"
)//自定义结构实现接口
type args []string
func (a *args) String() string {return fmt.Sprintf("%v", *a)
}
func (i *args) Set(value string) error {if len(*i) > 0 {return errors.New("interval flag already set")}for _, dt := range strings.Split(value, ",") {*i = append(*i, dt)}return nil
}
func base_parse() {const (defaultGopher = "pocket"usage         = "the variety of gopher")var log int//init for init param, return int point// param:name, deaault val, help message//解析参数通过指针返回var intflag = flag.Int("int", 100, "help message for int")flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)flag.StringVar(&gopherType, "g", defaultGopher, usage+"(shorthand)")//指定一个传入参数的指针flag.IntVar(&log, "log_level", 0, "log level")flag.Parse()fmt.Println("initFlag:", *intflag)fmt.Println("log_level:", log)fmt.Println("gopherType string ", gopherType)
}/*自定义参数解析*/
func userdef_parse() {var argFlag argsflag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events")flag.Var(&argFlag, "arg", "comma-separated list of intervals to use between events")flag.Parse()fmt.Println("arg  string ", argFlag)fmt.Println(intervalFlag)
}/*解析传入的字符串*/
func parse_input(arg string) {argv := []string{}for _, dt := range strings.Split(arg, " ") {argv = append(argv, dt)}//创建flagSetset := flag.NewFlagSet("test", flag.ExitOnError)//注册解析参数varflag := set.String("ver", "myver", "version")pflag := set.String("p", "myp", "version")//解析参数set.Parse(argv)fmt.Println("input parse:", *varflag, *pflag)
}
func main() {userdef_parse()parse_input("-p 123 -ver 1234")
}

golang flag相关推荐

  1. 使用Golang flag包解析字符串

    本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...

  2. golang flag简单用法

    版权声明:本文可能为博主原创文章,若标明出处可随便转载. https://blog.csdn.net/Jailman/article/details/80972643 package mainimpo ...

  3. golang flag包使用示例:接收命令行参数

    flag包 package mainimport "flag" import "fmt"// 定义命令行参数对应的变量,这三个变量都是指针类型 var cliN ...

  4. golang flag包(命令行参数解析)

    1.1 使用示例: 我们以 nginx 为例,执行 nginx -h,输出如下: nginx version: nginx/1.10.0 Usage: nginx [-?hvVtTq] [-s sig ...

  5. golang flag.Parse包

    package mainimport ("flag""fmt" ) // 定义命令行参数对应的变量,返回类型指针类型*string var name = fla ...

  6. golang byte转string_Golang和Rust语言常见功能/库

    时下最流行.最具发展前途的的两门语言是Golang和Rust.Golang语言简洁.高效.并发.并且有个强大的囊括了常见功能标准库.与之相对比,Rust语言则主要是安全.高性能.虽然Rust没有gol ...

  7. python flag 参数_flag_flagpython_js开关flag - 云+社区 - 腾讯云

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! apple.stackexchange.comquestions336888wh ...

  8. Golang实现文件搜索器

    Golang实现文件搜索器 前言 一.文件搜索器 二.使用步骤 1.查看帮助 2.查询文件 三.代码说明 1.命令行参数解析 2.递归查询实现 四.完整代码 前言 这个搜索器使用到了Golang fl ...

  9. Golang Study

    安装 下载第三方包 - Golang中国 IDEA IDEA写Golang的一些操作/技巧 - 冥灭 - SegmentFault 亲测可用!!!golang如何在idea中保存时自动进行代码格式化 ...

  10. Go获取命令行参数及信号量处理

    部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用os库和flag库. golang os库获取命令行参数 os可以通过变量Args来获取命令参数 ...

最新文章

  1. hadoop元数据合并过程_Hadoop元数据合并异常及解决方法
  2. SAP License:SAP货币转换
  3. 解决IDEA 中git 无法自动push 提交问题 Push failed: Failed with error: Could not read from remote repository.
  4. Java 数组在内存中的结构
  5. Linux的用户和组群管理
  6. Linux Tun/Tap网口(/dev/net/tun)的读写方法
  7. Cocos2d-x音乐和音效概述
  8. Excel填充日期和星期
  9. Differential Geometry之第十章极小曲面
  10. excel小技巧1:修改的日期格式为什么要双击一下单元格才能变
  11. Ubuntu 切换中文目录为英文目录
  12. arXiv 注册完整过程(图文详解)
  13. 给Date加上23时59分59秒
  14. sigmoid和softmax
  15. 用Python+selenium实现在全国报刊索引上搜集资料
  16. 如何从实验室菜鸟如何蜕变成实验巨人?
  17. SDN初步:Mininet(SDN测试平台)Ryu(SDN控制器)
  18. 苹果 iOS 内购三步曲:App 内退款、历史订单查询、绑定用户防掉单
  19. 电脑键盘部分按键失灵_电脑键盘失灵个别字母不灵怎么办 键盘失灵解决方法...
  20. 微软CRM使用(视频教学

热门文章

  1. Java练习10:输入两个正整数m和n,求其最大公约数和最小公倍数
  2. mysql的外文图书_外文数据库
  3. 系统集成项目管理工程师06《项目成本管理》
  4. 永恒python配合什么主武器_「和平精英武器组合」游戏的主副武器应该怎么搭配?这三种配合让你战斗力提升...
  5. Web网页设计规范详细介绍
  6. DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管
  7. php 队列管理器,Horizon 队列管理工具
  8. QQ坦白说BUG 找出对方
  9. 软件工程导论复习之可行性研究
  10. 单片机TTL电平软件模拟串口通讯