Windows平台下的gRPC环境搭建,环境配置时候踩了不少坑
Protobuf相关配置
Protobuf
首先,go的环境要配置好,然后利用go get 安装proto
go get -u github.com/golang/protobuf/proto
如果出现超时等网络问题(你懂得)导致失败,大致如果出现网络问题(你懂得)导致失败,大致有两种解决方法:
1.给你的终端设置代理(主要是给git设置代理)
2.修改Go的代理
如果选择第二种方式,可以访问goproxy.io官网查看介绍(也有其他的go代理,自行选择)然后要开启go mod,并且使用如下命令进行设置:
go env -w GOPROXY=https://goproxy.io,direct
在https://github.com/google/protobuf/releases ,下载相应的编译好的压缩包,将解压后得到的protoc.exe放在GOPATH下的bin目录中
Protoc-gen-go
现在要下载protoc-gen-go,它是go版本的Protobuf编译器插件,命令如下:
go get -u -v [github.com/golang/protobuf/protoc-gen-go](<http://github.com/golang/protobuf/protoc-gen-go>)
protoc-gen-go 将自动安装到 $GOPATH/bin 目录下,注意在之前配置go语言环境时,这个目录就应该加入到环境变量中。
gRPC相关配置
gRPC
安装使用官方安装命令:
go get google.golang.org/grpc
会报如下错误:
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)
原因是这个代码已经转移到github上面了,但是代码里面的包依赖还是没有修改,还是google.golang.org的路径,所以不能使用go get的安装方法,只能用git clone
git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH%/src/golang.org/x/text
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
cd $GOPATH/src/
go install google.golang.org/grpc
要注意如果是在powershell中执行命令,要把$GOPATH替换为$env:GOPATH才能正确指向配置好的GOPATH环境变量,如果是cmd中要替换为%GOPATH%(这个真的折磨,主要是在powershell中使用$GOPATH执行也不会报错,所以排查好久才发现)
consul
在consul官网下载windows对应的zip然后解压后得到exe,我把它扔到了$GOPATH/bin下,这样就可以在命令行中调用了,
consul agent -dev
然而报错: Error starting agent: listen tcp 127.0.0.1:8500: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
用管理员身份运行powershell也依然出错,利用netstat命令查看8500端口情况(netstat -aon|findstr “8500”)发现并没有被其他程序占用,
于是在网上搜索,github上对应repo的issues有提到但并没有有效的解决方法,但我感觉基本上就是防火墙的问题,所以在windows设置界面进行调整,如下:

一般而言consul不会出现在列表中,先点击更改设置然后允许其他应用中找到consul.exe的路径添加进去再赋予权限即可。
go-micro
后面是go micro框架安装时遇到的坑,我参考的项目使用的是最开始的micro版本也就是v1,而当前micro有了v3而且依然使用v1貌似和新版本go有不兼容的问题,所以准备迁移到v3上(目测后面还会有坑)
原本的安装方式如下:
#安装go-micro
go get -u -v github.com/micro/go-micro
#安装工具集
go get -u -v github.com/micro/go-micro
#安装protobuf插件
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u github.com/micro/protoc-gen-micro
但我安装后运行micro报了如下错误,搜索后发现可能是版本问题于是选择升级到v3

这时要注意区分Micro 3和go micro v3,micro 3.0版本的时候叫做M3O,是一个云原生开发平台,而且废弃了go-micro作为微服务框架,然后go micro变成了个人项目继续更新,具体的”爱恨情仇“可以去知乎等平台搜索下,这里我们需要的是一个微服务框架,也就是go micro v3
新的安装命令如下:
go get github.com/asim/go-micro/cmd/protoc-gen-micro/v3
go get github.com/asim/go-micro/v3
然后我们也可以安装一下micro 3.0的micro工具,帮助我们利用命令行命令快速创建微服务的系列文件
go get github.com/micro/micro/v3
这样就可以使用下面的命令很方便的创建新的服务:
micro new serviceName
但要注意的是通过这种方式创建的服务文件里面引用的头文件基于的路径是github.com/micro/micro/v3/
,需要修改成github.com/micro/micro/v3/