.. _go_proxy: ====================== 配置Go程序代理服务器 ====================== Go程序可以理解环境变量 ``http_proxy`` 和 ``no_proxy`` ,但是当使用 ``go get`` 和 ``go install`` 都是使用SCM来完成的,所以还需要配置 :ref:`git_proxy` 。目前我实践下来需要以下步骤: 配置go的HTTP代理 =================== - 配置 ``http_proxy`` 和 ``https_proxy`` 环境变量; .. literalinclude:: go_proxy/env :language: bash :caption: 配置代理环境变量 - 配置 :ref:`git_proxy` : .. literalinclude:: ../devops/git/git_proxy/git_config_http.proxy :language: bash :caption: 全局配置git使用HTTP/HTTPS代理 配置go的socks代理 =================== 更为简单的方式是采用 :ref:`ssh_tunneling_dynamic_port_forwarding` 方式下的 ``socksh`` 代理 .. literalinclude:: go_proxy/socks_proxy :language: bash :caption: 配置socks代理环境变量 .. note:: 我的实践发现在 :ref:`ubuntu_image` 容器中使用 ``socks5h`` 协议会失败,改为 ``socks5`` 协议则成功。有点奇怪的是Host主机是正常的 使用官方go代理 =============== 上述使用socks代理或http代理都是采用操作系统底层proxy功能,实际上Go内置了专有的代理机制,更为透明且高效。在国内,可以使用 `Goproxy.cn `_ 提供的Go模块代理: .. literalinclude:: go_proxy/goproxy.cn :caption: 使用 goproxy.cn 提供的模块代理 然后就能正常安装Go模块 另外,也能在命令行使用,例如在 :ref:`ubuntu_image` 制作时在 ``Dockerfile`` 中使用: .. literalinclude:: go_proxy/dockerfile :caption: 在Dockerfile中使用代理安装Go模块` 归档(现在不用了) =================== .. warning:: 我最近一次 :ref:`homebrew_init` 实践安装 :ref:`colima` 遇到问题,似乎通过 ``alias`` 方式设置 ``go`` 命令没有成功,所以这段设置方法暂时废弃(归档)。实际使用方法暂时以上文设置环境变量 ``http_proxy`` 和 ``https_proxy`` 为准。 HTTP代理 比较简单的方法是在执行 ``go`` 命令时直接传递代理配置:: http_proxy=192.168.10.9:3128 go get golang.org/x/tools/gopls@v0.7.1 为了方便使用,可以使用 ``alias`` : .. literalinclude:: go_proxy/alias_go_proxy.sh :language: bash :caption: alias设置go代理 Socks代理 ------------ socks代理: .. literalinclude:: go_proxy/alias_go_socks_proxy :language: bash :caption: alias设置go socks代理 参考 ====== - `How do I configure go command to use a proxy? `_