Go中的“3状态”命令行参数

时间:2013-03-26 09:12:44

标签: go

我正在编写一个需要访问Internet的应用程序。从某些主机,连接需要通过代理。我知道可以在环境变量上设置代理,但我想从应用程序本身进行设置。 我需要一个可以以三种不同方式使用的命令行参数:

  1. 根本没有给出 - >没有代理
  2. - use-proxy - >使用默认代理
  3. - use-proxy“http://my-proxy.com:880” - >使用给定代理
  4. 以下使用默认或给定地址但不能用于忽略代理:

      

    use_proxy:= flag.String(“use-proxy”,“http://my-proxy.com:880”,“使用代理......”)

    这只完成了第1点和第1点。 2:

    use_proxy := flag.Bool("use-proxy", false , "Use proxy...")
    if *use_proxy {
      ...
      proxyUrl, err := url.Parse("http://my-proxy.com:880")
      ...
    }
    

    问题可以通过两个标志来解决,但我宁愿只使用一个:

      

    myapp --use-proxy --proxy“http://my-proxy.com:880

1 个答案:

答案 0 :(得分:3)

如果您的应用肯定不会使用任何其他命令行参数,那么您只需使--use-proxy成为布尔标志,然后从第一个命令行参数获取代理URL,即从{{1}获取}。

这可能不是长期的好主意,因为它限制了为你的程序添加额外的参数/选项。

大多数参数解析器都不会处理这样的情况,因为它会使解析命令行选项不明确。

其他选项可以是允许使用默认值的关键字,例如:

os.Args

或使用两个选项,两个选项都启用代理,但只有一个选择参数,例如:

myapp --use-proxy "http://my-proxy.com:880"
myapp --use-proxy default
相关问题