最新消息

Go编译proto文件

乐鱼网教程 2021-03-28 23:23

文章目录1.安装Go1.1下载Go1.2配置go环境2.工具安装2.1安装protoc2.2安装protoc-gen-go2.3安装protoc-gen-validate2.4安装protoc-gen-doc2.5安装proto-gen-java3.编译3.1hello.proto3.2编译3.2.1编译为Go代码(protoc-gen-go)3.2.2编译为Java代码(protoc-gen-java)3.2.3生成proto文档(proto-gen-doc)3.3复杂点的proto3.4编译脚本

1.安装Go

1.1下载Go

wgethttp://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz

#解压

tar-zxvfgo1.13.4.linux-amd64.tar.gz

1.2配置go环境

编辑/etc/profile文件

vim~/.bashrc

将下面内容加入到末尾(GOPAT是我Windows中的GOPATH)

exportGOROOT=/usr/local/go

exportGOPATH=/home/pibigstar/goWork

exportPATH=$GOPATH/bin:$PATH

exportPATH=$PATH:$GOROOT/bin:$GOPATH/bin

2.工具安装

2.1安装protoc

去这个网址下载:http://github.com/protocolbuffers/protobuf/releases,根据自己的系统,下载对应的文件


解压:

unzipprotoc.zip

将bin文件夹下的protoc复制到Linux中的/bin目录下

sudocpprotoc/bin/protoc/bin/protoc

执行protoc-verson如果输出版本信息则证明配置成功

2.2安装protoc-gen-go

#下载

gitclonehttp://github.com/golang/protobuf.git

#进入目录

cdprotobuf/protoc-gen-go

#编译

goinstall

2.3安装protoc-gen-validate

这个是用来生成pb的校验规则文件,也就是*.pb.validate.go

goget-ugithub.com/envoyproxy/protoc-gen-validate

2.4安装protoc-gen-doc

这个是用来生成proto的文档文件,会生成一个html格式的文档,下载地址:http://github.com/pseudomuto/protoc-gen-doc/releases

wgethttp://github.com/pseudomuto/protoc-gen-doc/releases/download/v1.3.0/protoc-gen-doc-1.3.0.windows-amd64.go1.11.2.tar.gz

#解压

tar-zxvfprotoc-gen-doc-1.3.0.windows-amd64.go1.11.2.tar.gz

2.5安装proto-gen-java

可在这个地址下载protoc-gen-java工具,http://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/,记得把文件名改为protoc-gen-grpc-java.exe

3.编译

3.1hello.proto

hello.proto

syntax="proto3";

packagemain;

messageHello{

stringvalue=1;

}

3.2编译

3.2.1编译为Go代码(protoc-gen-go)

protoc--go_out=plugins=grpc,paths=source_relative:.--validate_out="lang=go,paths=source_relative:."hello.proto

注意

paths参数


使用source_relative则不会使用optiongo_package中指定的路径


使用import则是使用optiongo_package中指定的路径

3.2.2编译为Java代码(protoc-gen-java)

可在这个地址下载protoc-gen-java工具,http://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/1.0.1/,记得把文件名改为protoc-gen-grpc-java.exe

protoc--java_out=.--grpc-java_out=.hello.proto

3.2.3生成proto文档(proto-gen-doc)

protoc--doc_out=.--doc_opt=html,index.html:Ignore*hello.protouser.proto

3.3复杂点的proto

syntax="proto3";

//生成的pb文件中package为admin

packageadmin;

//生成go文件的路径

optiongo_package="pb/admin";

//关闭Java多文件

optionjava_multiple_files=false;

//生成的Java文件的package路径

optionjava_package="pb.admin";

serviceUserService{

rpcLogin(LoginReq)returns(LoginResp);

}

messageLoginReq{

stringusername=1;

stringpassword=2;

}

messageLoginResp{

int32code=1;

stringmsg=2;

}

3.4编译脚本

#!/usr/bin/envbash

TARGET="../"

if[-n"$1"];then

TARGET=$1

fi

#排除掉extra/src目录

forfilein`find.-path./extra/src-prune-o-name'*.proto'-print`;

do

echo$file

protoc-I=extra/src:.--go_out=plugins=grpc,paths=import:$TARGET--validate_out="lang=go,paths=import:$TARGET"$file

done


作者:跟派大星学编程

退出