解决golang.org不能访问


众所周知的原因 类似于 golang.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)
使用 go get / go install / go mod 等命令时 会自动下载相应的包或依赖包
golang.org不能访问 解决方式

手动下载镜像仓库

常见的 golang.org/x/... 包 一般在 GitHub  有官方的镜像仓库对应
比如 golang.org/x/text 对应 github.com/golang/text  手动下载 或 clone 对应的 GitHub 仓库到指定的目录下
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 1.11开始 支持 go modules 用于解决包依赖管理 该工具提供 replace  解决包的别名问题 也能解决 golang.org/x 无法下载的的问题
go module 被集成到原生的 go mod 命令中 但是如果代码库在 $GOPATH 中 module 功能是默认没开启 开启通过环境变量即可开启 export 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 环境变量

Go 1.11 版本 官方支持 go module 包依赖管理工具
还新增了 GOPROXY 环境变量 如果设置了该变量 下载源代码时将会通过这个环境变量设置的代理地址  不再是以前的直接从代码库下载
可喜的是 goproxy.io 这个开源项目 实现好了 该项目允许开发者一键构建自己的 GOPROXY 代理服务
同时 也提供了公用的代理服务 https://goproxy.io  只需设置该环境变量即可正常下载被墙的源码包了
export GOPROXY=https://goproxy.io
也可以通过置空这个环境变量来关闭 export GOPROXY=
对于 Windows 用户 可以在 PowerShell 中设置 $env: GOPROXY = "https://goproxy.io"
推荐使用 GOPROXY 这个环境变量的解决方式 前提是 Go version >= 1.11

也可试试手动加入被墙的 原始包 记住版本号 不知道的话 试试v0.0.0
go.mod文件
module fetcher
go 1.12
require golang.org/x/net v0.0.0
replace golang.org/x/net v0.0.0 => $GOPATH/src/golang.org/x/net latest
replace golang.org/x/sys v0.0.0 => $GOPATH/src/golang.org/x/sys latest
replace golang.org/x/text v0.0.0 =>$GOPATH/src/golang.org/x/text latest

用github上的镜像地址替换
$ go mod edit -replace=golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest
$ go mod edit -replace=golang.org/x/sys@v0.0.0=github.com/golang/sys@latest