golang 使用protobuf其实网上已经有很多的讲解了,只不过大部分都是复制黏贴。。。看的我很无奈。
这篇主要讲我自己开始搞的时候有点迷糊的地方,可能会帮到其他跟我一样新手的人。

首先下载protobuf的 编译器protoc 地址:记得下载对版本
window:
下载 protoc-3.6.1-win32.zip
解压后,把bin目录下的exe文件复制到到你的%GOROOT%目录下(放这个目录是因为,我们的GOROOT在配置GoLang环境的时候,GoLang已经帮我们设置好了环境变量,如果你要放其他目录,那么要自己去设置环境变量)

接着我们要获取到protobuf的go插件
go get -u github.com/golang/protobuf/protoc-gen-go
如果获取不到的话 可以自己去gitbub上面 clone或是下载 地址:连接地址
记得下载后要复制到github.com/golang这个目录下,然后进行手动安装

go install github.com\golang\protobuf\protoc-gen-go

之后会在bin文件夹里面生成protoc-gen-go.exe,把protoc-gen-go.exe也放到%GOROOT%一起
golang使用protobuf插件
到这里其实跟别人的教程是差不多的。再往下,别人的教程基本都是直接说执行命令protoc --go_out=. *.proto就可以了,却没说要把proto文件放在哪里…反正我是新手,对这些命令也不太懂,懵逼了。。所以直接将proto文件放在我go项目的根目录执行。。果然报错了。。
最后发现这个命令,必须得将proto文件放在protoc.exe的同目录下才可以,所以执行会报错,解决方法有两个:

  • 一是将proto文件放到protoc.exe同目录下,然后通过cmd执行这个命令,就会在同目录下生成go文件。但是我觉得这方法很蛋疼。。
  • 我们可以修改命令来指定proto文件目录,且可以控制生成go文件的位置
    进入cmd 执行protoc --proto_path=你proto文件的目录 --go_out=生成go文件的目录 你的proto文件.proto

这样就可以指定你的proto文件就可以放在任意地方了,包括可以直接在项目里面生成的go文件 不过每次都要进入cmd执行这这么麻烦命令也是很烦的,最后我还是写了bat文件
只要在这个bat文件同目录下创建一个protos文件夹来存放proto文件后,双击bat就会自动帮你生成go文件到同目录下的pb目录下
最后放上bat,当然如果你的protoc.exe 不是放在%GOROOT%目录的话,只需要稍微修改下bat里面protoc的路径也是可以用的

@echo off
set PATH=%~dp0
set PROTOC=%GOROOT%bin\protoc.exe
set PROTO_PATH=%PATH%protos
set GO_PATH=%PATH%pb
echo PROTOC:%PROTOC%
echo PATH:%PATH%
echo PROTO_PATH:%PROTO_PATH%
echo GO_PATH:%GO_PATH%

if exist %GO_PATH% (
echo %GO_PATH% 文件夹已存在
for /f "delims=" %%i in ('dir /b "%GO_PATH%\*.go"') do (
echo 删除文件%%i
del %GO_PATH%\%%i
)
) else (
echo 创建文件夹%%i
md pb %PATH%
)

for /f "delims=" %%i in ('dir /b "%PROTO_PATH%\*.proto"') do (
echo 生成%%i
%PROTOC% --proto_path=%PROTO_PATH% --go_out=%GO_PATH% %%i
)
pause

相关文章: