使用Golang flag包解析字符串

本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章:

Go语言中使用flag包对命令行进行参数解析的方法 https://www.jb51.net/article/82812.htm

Golang的flag包类似于c语言里面的getopt, getopt_long函数,都是用来解析命令行字符串的类似于如下格式

iptables -A INPUT -i eth0 -p tcp -j ACCEPT

首个字符串是程序名字,后面都是参数,这些参数可以使用flag包来解析。当然这是命令行提供字符串,如果字符串由其它来源提供的话,比如说程序启动后,收到字符串参数,这时候就不能够直接调用flag.Parse()来解析了,因为默认是从os.Args字符串切片中解析,flag包Parse源码

// Parse parses the command-line flags from os.Args[1:]. Must be called
// after all flags are defined and before flags are accessed by the program.
//默认从os.Args字符串切片中解析
func Parse() {
	// Ignore errors; CommandLine is set for ExitOnError.
	CommandLine.Parse(os.Args[1:])
}

这种情况下只需要构造好os.Args就又能够使用了,比如下面的例子:

//先将字符串分割成字符串切片
flags := strings.Split(Cmd, " ")


//重新构造os.Args
os.Args = os.Args[:0]

//将字符串切片追加到os.Args中
for _, value := range flags {
	os.Args = append(os.Args, value)
}

//调用flag包解析
flag.Parse()

使用flag前需要绑定好参数,参数只需绑定一次,多了会报错,如果重复调用flag.Parse的话,每次使用前需要将参数初始化,不然可能会残留上一次解析后的值

猜你喜欢

转载自blog.csdn.net/fuyuande/article/details/88580528