golang.orggoogle.comgoogle.golang.org/grpc

即:

Fetching https://google.golang.org/grpc?go-get=1
https fetch failed: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

 

要解决这类问题,有以下三种方案:

友情提示:最新版本 Golang(1.11+)建议使用 Go Moudles + GoProxy 管理依赖。

1、VPN

google.golang.org

2、git clone && go install

github.com$GOPATH/src
cd $GOPATH/src
git clone https://github.com/grpc/grpc-go.git google.golang.org/grpc
google.golang.org/grpcgo install
git clone https://github.com/golang/net.git golang.org/x/net
git clone https://github.com/golang/text.git golang.org/x/text
git clone https://github.com/google/go-genproto.git google.golang.org/genproto

接下来,通过如下命令安装 Golang Protobuf 包:

go get -u -v github.com/golang/protobuf/proto
go get -u -v github.com/golang/protobuf/protoc-gen-go

3、go module

helloworld
go mod init helloworld
go.mod
main.go
package main

import "google.golang.org/grpc"

func main() {
	grpc.NewServer()
}
google.golang.org/grpcgithub.com/grpc/grpc-go@latest
go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest
main.go
go mod tidy

此时会报错:

google.golang.org/grpcgithub.com

 

go mod edit -replace=golang.org/x/tools@v0.0.0-20190524140312-2c0ae7006135=github.com/golang/tools@v0.0.0-20190524140312-2c0ae7006135
go mod edit -replace=google.golang.org/genproto@v0.0.0-20180817151627-c66870c02cf8=github.com/google/go-genproto@v0.0.0-20180817151627-c66870c02cf8
go mod edit -replace=google.golang.org/appengine@v1.1.0=github.com/golang/appengine@v1.1.0
go mod edit -replace=golang.org/x/oauth2@v0.0.0-20180821212333-d2e6202438be=github.com/golang/oauth2@v0.0.0-20180821212333-d2e6202438be
go mod edit -replace=golang.org/x/net@v0.0.0-20190311183353-d8887717615a=github.com/golang/net@v0.0.0-20190311183353-d8887717615a
go mod edit -replace=golang.org/x/sys@v0.0.0-20190215142949-d0b11bdaac8a=github.com/golang/sys@v0.0.0-20190215142949-d0b11bdaac8a
go mod edit -replace=golang.org/x/lint@v0.0.0-20190313153728-d0100b6bd8b3=github.com/golang/lint@v0.0.0-20190313153728-d0100b6bd8b3
go mod edit -replace=cloud.google.com/go@v0.26.0=github.com/googleapis/google-cloud-go@v0.26.0
go mod tidygolang.orggo mod tidygo.sum
vendor
go mod vendor
helloworld
vendor

 

go build -mod=vendor
$GOPATH

4、go module & GOPROXY

对于 Go 1.11 及以上版本,在开启 Go Module 支持的情况下(1.13及以上版本默认开启),还可以通过代理服务来完成 Go 依赖包的下载,这样处理起来比上述第三种方案更加快捷,我们无需手动替换下载源,所有依赖会自动从代理的镜像地址下载。

helloworld2
go mod init helloworld2
GOPROXYGOPROXY
export GOPROXY=https://goproxy.cn

如果你是在 GoLand 中开发,还可以通过 Preferences->Go->Go Modules 来配置 Proxy 设置:

或者干脆直接通过 Go Modules 创建新项目:

main.go
package main

import "google.golang.org/grpc"

func main() {
	grpc.NewServer()
}
go mod tidygoogle.golang.org/grpc
go mod vendorvendor
go vendor
go.mod
module helloworld2

go 1.12

require google.golang.org/grpc v1.23.0

 

main.go

综合比较下来,如果你的 Go 语言版本是1.11+,推荐使用代理的方式来下载 Go 依赖包。