3

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

  1. 根本没有给出 -> 没有代理
  2. --use-proxy -> 使用默认代理
  3. --use-proxy " http://my-proxy.com:880 " -> 使用给定的代理

以下使用默认或给定地址,但不能用于忽略代理:

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

这一项仅完成第 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 "

4

1 回答 1

3

如果您的应用程序肯定不会使用任何其他命令行参数,那么您可以只制作--use-proxy一个布尔标志,然后从第一个命令行参数获取代理 URL,即从os.Args.

不过,从长远来看,这可能不是一个好主意,因为它限制了向您的程序添加额外的参数/选项。

大多数参数解析器不会处理这样的情况,因为它使解析命令行选项模棱两可。

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

myapp --use-proxy "http://my-proxy.com:880"
myapp --use-proxy default

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

myapp --use-proxy <proxy URL>
myapp --use-default-proxy
于 2013-03-26T09:37:14.053 回答