Golang的标志(flags)可以接受任意的参数。

huangapple go评论78阅读模式
英文:

Golang flags takes any arbitrary arguments

问题

我有一个包装另一个可执行文件的程序。我需要提供一些接口,以便当调用我的程序时,用户可以提供任意的参数,这些参数将传递给被包装的可执行文件。例如:

当用户调用

$ myprogram --call -additional -a -b -c 1 -d=true

我希望我的程序调用

wrapped_executable -a -b -c 1 -d=true

使用flags包,实现这一目标的最佳方法是什么?

英文:

I have a program which wraps another executable. I need to provide some interface so that we my program is called, user can provide any arbitrary arguments which will be passed on to the executable that it wraps. For example:

When user calls

$ myprogram --call -additional -a -b -c 1 -d=true

I would like my program to call

wrapped_executable -a -b -c 1 -d=true

What is the best way to achieve this using flags package?

答案1

得分: 1

flag文档中可以得知:

在第一个非标志参数之前(“-”是非标志参数)或者终止符“--”之后,标志解析会停止。

所以,在调用外部可执行文件时,将-additional替换为--

$ myprogram --call --  -a -b -c 1 -d=true

然后,可以通过以下方式获取--之后的参数:

flag.Parse()
args := flag.Args() // []string{"-a", "-b", "-c", "1", "-d=true"}
英文:

From the flag docs docs:

> Flag parsing stops just before the first non-flag argument ("-" is a
> non-flag argument) or after the terminator "--".

so when invoking your outer exe, replace -additional with --:

$ myprogram --call --  -a -b -c 1 -d=true

and then to get the arguments after the --:

flag.Parse()
args := flag.Args() // []string{"-a", "-b", "-c", "1", "-d=true"}

huangapple
  • 本文由 发表于 2021年10月14日 21:45:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/69571853.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定