- 错误“dial tcp 172.217.24.17:443: i/o timeout”
对如下编译错误:
go build -o hello main.go build command-line-arguments: cannot load google.golang.org/grpc: module google.golang.org/grpc: Get https://proxy.golang.org/google.golang.org/grpc/@v/list: dial tcp 172.217.24.17:443: i/o timeout |
有两个解决办法:
- 代理方式
即在执行前先设置好环境变量“GOPROXY”和“GO111MODULE”:
export GO111MODULE=on export GOPROXY=https://goproxy.io或者export GOPROXY=https://goproxy.cn |
对于1.13及以上版本,可直接如下这样:
go env -w GOPROXY=https://goproxy.cn,direct |
推荐使用七牛云的“goproxy.cn”,因为“goproxy.io”也不一定可用。自动下载的包被放在用户的主目录(实为GOPATH目录,可执行“go env|grep GOPATH”确认)下,完整路径为:~/go/pkg/mod,如:
$ls -l ~/go/pkg/mod total 0 drwxr-xr-x 4 guest staff 128 2 21 14:11 cache drwxr-xr-x 3 guest staff 96 2 21 14:11 github.com drwxr-xr-x 3 guest staff 96 2 21 14:11 golang.org drwxr-xr-x 4 guest staff 128 2 21 14:11 google.golang.org |
如遇到如下错误:
go: downloading google.golang.org/grpc v1.27.1 build command-line-arguments: cannot load google.golang.org/grpc: open /Users/guest/go/pkg/mod/cache/download/google.golang.org/grpc/@v/v1.27.1.lock: permission denied |
请在执行时加上“sudo”,比如:
sudo go build -o hello hello.go |
- 使用“go mod”的“replace”命令,将网络路径改成本地路径(当编译环境不能网络自动下载时解决办法),如:
$cat go.mod module hello
go 1.13
require google.golang.org/grpc v1.27.1 // indirect
replace google.golang.org/grpc => /usr/local/go/src/google.golang.org/grpc |
注意,replace中的不一定需出现在require中。
- 错误“missing dot in first path element”
如下错误可能是需要先到上一级目录先编译一次:
build command-line-arguments: cannot load test/hello: malformed module path "test/hello": missing dot in first path element |
也有可能是import问题,比如下面这样:
import ( "fmt" myproto "proto" ) import ( "test/proto" ) |
得把myproto那一行删除。
- 错误“but does not contain package”
build command-line-arguments: cannot load github.com/go-redis/redis/v7: module github.com/go-redis/redis/v7@latest found (v7.2.0), but does not contain package github.com/go-redis/redis/v7 |
这个可能是因为没有目录的可执行和文件的读取权限,比如go-redis的属主是root,而使用的是非root,解决办法是为目录增加可执行权限和文件增加可读权限。
- 错误“go.mod: no such file or directory”
go: google.golang.org/grpc@v1.27.1: parsing /usr/local/go/src/google.golang.org/grpc/go.mod: open /usr/local/go/src/google.golang.org/grpc/go.mod: no such file or directory |
遇到这个错误时,可尝试将go.mod文件删除后重执行“go mod init”操作,然后再执行“go build”编译。执行“go build”有个提前,即要能拉取(go get)互联网上的依赖的包。