• Golang 入门 : 配置代理


    由于一些客观原因的存在,我们开发 Golang 项目的过程总会碰到无法下载某些依赖包的问题。这不是一个小问题,因为你的工作会被打断,即便你使用各种神通解决了问题,很可能这时你的线程已经切换到其他的事情上了(痛恨思路被打断!)。所以最好是一开始我们就重视这个问题,并一劳永逸的解决它。

    问题描述

    当我们使用 go get、go install、go mod 等命令时,类似于 golang.org/x/... 的包会是无法下载的。比如通过下面的命令下载 sys 包:

    $ go get -u golang.org/x/sys

    下载肯定会失败:

    设置代理

    如果你有自己的代理服务器,那就很容易了,这也是一劳永逸的方法。直接设置环境变量 http_proxy 和 https_proxy 就行了:

    export http_proxy=http://proxyAddress:port
    export https_proxy=http://proxyAddress:port

    比如笔者在局域网中共享了代理 192.168.21.1:1080:

    $ export http_proxy=http://192.168.21.1:1080
    $ export https_proxy=http://192.168.21.1:1080

    然后执行下面的命令后就能够下载了:

    $ go get -u golang.org/x/sys

    手动下载并安装包

    如果一时找不到合适的代理,还可以临时通过手动的方式下载包。我们常见的 golang.org/x/... 包,一般在 GitHub 上都有官方的镜像仓库对应。比如 zieckey/golang.org 就是作为 golang.org/x 的镜像库存在的。我们可以手动下载或 clone 对应的 GitHub 仓库到指定的目录下,比如从 zieckey/golang.org 下载 x 目录下的所有包。或者是每次只下载单个的库,下面的示例演示如何下载 text 库:

    $ mkdir $GOPATH/src/golang.org/x
    $ cd $GOPATH/src/golang.org/x
    $ git clone git@github.com:golang/text.git

    当如果需要指定版本的时候,该方法就无解了,因为 GitHub 上的镜像仓库多数都没有 tag。

    使用 go mod replace

    从 Go 1.11 版本开始,新增支持了 go modules 用于解决包依赖管理问题。该工具提供了 replace,就是为了解决包的别名问题,也能替我们解决 golang.org/x 无法下载的的问题。

    go module 被集成到原生的 go mod 命令中,但是如果你的代码库在 $GOPATH 中,module 功能是默认不会开启的,想要开启也非常简单,通过一个环境变量即可开启 export GO111MODULE=on。比如下面的示例,在go.mod中指定下面的代码:

    module example.com/demo
    
    require (
        golang.org/x/text v0.3.0
    )
    
    replace (
        golang.org/x/text => github.com/golang/text v0.3.0
    )

    使用 GOPROXY 环境变量

    从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具。其实还新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。比如我们可以指定自己的代理地址。

    更可喜的是,goproxy.io 这个开源项目帮我们实现好了我们想要的。该项目允许开发者一键构建自己的 GOPROXY 代理服务。同时,也提供了公用的代理服务 https://goproxy.io,我们只需设置该环境变量即可正常下载被墙的源码包了:

    export GO111MODULE=on
    export GOPROXY=https://goproxy.io

    也可以通过置空这个环境变量来关闭,export GOPROXY=。

    对于 Windows 用户,可以在 PowerShell 中设置:

    $env:GOPROXY = "https://goproxy.io"

    最后,我们当然推荐使用 GOPROXY 这个环境变量的解决方式,前提是 Go version >= 1.11。

    下载 golang.org/x/sys 包:

    $ go get -u golang.org/x/sys

    下载到的包在 $GPATH/pkg/mod/golang.org/x/

  • 相关阅读:
    QT小技巧
    C#通用类库设置开机自运行禁用任务管理器注册表等操作
    C#通用类库农历类(很全面)
    C#通用类库导出数据(比其他方式快200倍)
    如果你想当程序员!请看!
    C#通用类库汉字转拼音
    C#通用类库加密解密类
    C#制作图片压缩工具
    QT编写图片数据转换工具
    C++面试题 virtual
  • 原文地址:https://www.cnblogs.com/sparkdev/p/10649159.html
Copyright © 2020-2023  润新知