golang flag

栏目: Go · 发布时间: 7年前

内容简介:命令行获得可通过os.Args参数,Args在os中定义为:var Args []string

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=ture
	flag.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 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) > 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 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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Sexy Web Design

Sexy Web Design

Elliot Stocks / SitePoint / 2009-03-28 / $39.95

Description A guide to building usable, aesthetically pleasing interfaces for web sites and web applications by applying timeless principles of user-centered design. This book focuses on practical ......一起来看看 《Sexy Web Design》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具