golang flag
本文主要对golang环境下命令行的解析进行了相关的总结.命令行在C下有getopt等函数, 在golang下提供了更为方便的处理方法.
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.解析外部命令字符串
1.基本命令解析
命令注册:
通过flag.type(int,string等),提供命令名称, 默认参数值
按照返回值的形式分为两种, 返回值为值的指针, 通过传入指针,解析值后写入传入的指针
命令解析:
调用flag.Parse()解析命令行
2.自定义参数命令解析
自定义变量实现下面的接口:
type Value interface {
String() string
Set(string) error
}
并定义变量,通过flag.Var传入自定义变量
注册命令解析:
var argFlag args
flag.Var(&argFlag, "arg", "comma-separated list of intervals to use between events")
3.解析外部命令字符串
通过flag.NewFlagSet创建flagset.通过set的相关接口注册命令,通过set.Parse解析参数
实践代码如下:
package main import (
"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) > {
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", , "help message for int")
flag.StringVar(&gopherType, "gopher_type", defaultGopher, usage)
flag.StringVar(&gopherType, "g", defaultGopher, usage+"(shorthand)")
//指定一个传入参数的指针
flag.IntVar(&log, "log_level", , "log level")
flag.Parse()
fmt.Println("initFlag:", *intflag)
fmt.Println("log_level:", log)
fmt.Println("gopherType string ", gopherType)
} /*自定义参数解析*/
func userdef_parse() {
var argFlag args
flag.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)
}
//创建flagSet
set := 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的更多相关文章
- Golang : flag 包简介
在 Golang 程序中有很多种方法来处理命令行参数.简单的情况下可以不使用任何库,直接处理 os.Args:其实 Golang 的标准库提供了 flag 包来处理命令行参数:还有第三方提供的处理命令 ...
- golang flag包
go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) fu ...
- golang flag包简单例子
package main import ( "flag" "fmt" ) var workers int; func main() { flag.IntVar( ...
- golang flag简单用法
package main import ( "flag" "strings" "os" "fmt" ) var ARGS ...
- Golang flag包使用详解(一)
概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对 ...
- golang获取命令行参数
部署golang项目时难免要通过命令行来设置一些参数,那么在golang中如何操作命令行参数呢?可以使用os库和flag库. 1.golang os库获取命令行参数 os可以通过变量Args来获取命令 ...
- Golang : pflag 包简介
笔者在前文中介绍了 Golang 标准库中 flag 包的用法,事实上有一个第三方的命令行参数解析包 pflag 比 flag 包使用的更为广泛.pflag 包的设计目的就是替代标准库中的 flag ...
- [inner] bug
这样正确 command: ["sh", "-c", "mysql -h${DC_DB_HOST} -uroot -p${MYSQL_ROOT_PAS ...
- golang 之 flag.String
无论是c语言还是golang语言或是其他语言,启动应用程序时都可以带一些参数,然后系统根据传入的参数进行特点的工作.如:./main -b /home/backupdir -d true 那么如何更好 ...
随机推荐
- html页面的局部刷新
有时候我们在做一个动态/静态网页,网页中的某部分需要从服务器获取值但是不能把整个页面都提交到服务器,也就是要对页面做局部刷新,也就是对整个网页无刷新更新值.在这种情况下就需要用JS和XMLHttpRe ...
- C#request和response的中文乱码问题
request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码: response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...
- [GO]猜数字的小游戏
随机生成四位数字,然后用户输入四位数字,然后根据提示一步步猜到随机数 package main import ( "math/rand" "time" &quo ...
- css总结20:TCP通信协议WebSocket
HTML5 WebSocket 1 介绍: WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. 在WebSocket API中,浏览器和服务器只需要做一个握手的动 ...
- Backup--查看备份的历史记录
--==================================================== --查看数据库备份的详细信息:时间存储地址最大/最小LSN SELECT * FROM m ...
- js 去空格 和 获得字节数
function removespace(str) { return str.replace(/(^\s*)|(\s*$)/g, ""); } function getLength ...
- LoadRunner---杂问题&接口测试
问题1] 响应时间是系统完成事务执行准备后所采集的时间戳和系统完成待执行事务后所采集的时间戳之间的时间间隔,是衡量特定类型应用事务性能的重要指标,标志了用户执行一项操作大致需要多长时间.[问题2] 系 ...
- 【转】C#控件——DataGridView单元格文本自动换行
源地址:https://www.cnblogs.com/wangshenhe/archive/2012/07/25/2608324.html DataGridView是.NET开发中常用的控件,在开发 ...
- C# Winform中自定义筛选及自带统计行的Datagridview控件
网上分享有很多种自制DGV控件,都有不小的缺陷. 没办法,按需求自己定制了一个. 一.过滤方面类似于Excel的筛选功能.支持右键菜单筛选,同时也支持在文本框输入文字按焦点列进行筛选: 二.统计行我采 ...
- CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境【转载】
本文转载自 园友David_Tang的博客,如有侵权请联系本人及时删除,原文地址: http://www.cnblogs.com/mchina/archive/2012/11/28/2778779.h ...