问题描述

go getgo installgo modgolang.org/x/...
$ go get -u golang.org/x/sys

go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

解决方式

那我们该如何解决问题呢?毕竟还要制造 bug 的嘛~

手动下载

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

当如果需要指定版本的时候,该方法就无解了,因为 GitHub 上的镜像仓库多数都没有 tag。并且,手动嘛,程序员怎么能干呢,尤其是依赖的依赖,太多了。

设置代理

如果你有代理,那么可以设置对应的环境变量:

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

go mod replace

go modulesreplacegolang.org/x
go modulego mod$GOPATHmoduleexport GO111MODULE=on

以下为参考示例:

module example.com/hello

require (
    golang.org/x/text v0.3.0
)

replace (
    golang.org/x/text => github.com/golang/text v0.3.0
)

类似的还有 glide、gopm 等这类第三方包管理工具,都不同方式的解决方案提供给我们。

GOPROXY 环境变量

终于到了本文的终极大杀器 —— GOPROXY

Go 1.11go module
GOPROXY
GOPROXYhttps://goproxy.io
export GOPROXY=https://goproxy.io
export GOPROXY=
PowerShell
$env:GOPROXY = "https://goproxy.io"
GOPROXY

参考资料

  • goproxy.io for Go modules
  • goproxy.io

感谢您的阅读,觉得内容不错,点个赞吧 ????