下载 protoc-3.11.2-win64.zip 压缩包
将文件解压到某一文件夹。 如:C:\soft\protoc
将解压出来的文件夹下的 C:\soft\protoc\bin
目录配置到 PATH 环境变量下
window:
go get -u github.com/golang/protobuf/protoc-gen-go
,可以在你的%GOPATH%/bin路径下找到一个 protoc-gen-go.exe$GOPATH=C:\Users\answer\go\
common.ptoto
syntax = "proto3";
message Response {
// 状态编码
int32 code = 1;
// 状态编码具体错误描述
string message = 2;
// 返回数据
bytes result = 3;
}
# 进入对应的目录执行以下命令生成 common.ptoto.pb.go 文件
protoc.exe --go_out=./ common.ptoto
# 或使用以下命令
protoc --plugin=protoc-gen-go=C:\Users\answer\go\bin\protoc-gen-go.exe --go_out=./ common.proto
# 执行 protoc.exe --go_out=./ common.ptoto 报错, 错误描述
--go_out: protoc-gen-go: Plugin failed with status code 1.
# 解决方案
go get -u github.com/golang/protobuf/protoc-gen-go
undefined: proto.ProtoPackageIsVersion3
undefined: proto.ProtoPackageIsVersion3
# 通过 go get -u google.golang.org/grpc 安装的 protoc-gen-go版本永远是最新的(支持v3)
# 而使用grpc教程 demo 用的包是 protoc-gen-go v1.2.0 版本 (不支持v3 )
GIT_TAG="v1.2.0" # change as needed
go get -d -u github.com/golang/protobuf/protoc-gen-go
# 切换到 1.2.0 分支
git -C "$(go env GOPATH)"/src/github.com/golang/protobuf checkout $GIT_TAG
go install github.com/golang/protobuf/protoc-gen-go
undefined: proto.InternalMessageInfo
undefined: proto.InternalMessageInfo
# 原因: 新的版本加入了InternalMessageInfo导致编译不过
# 解决方案1、
# 1. 使用旧版本的插件,即手动下载并安装protoc-gen-go版本v1.1.0 (https://github.com/golang/protobuf/releases/tag/v1.2.0)来生成旧风格的原型代码。
# 下载文件
https://github.com/golang/protobuf/archive/v1.2.0.zip
# 解压, tar包方式: tar zxvf protobuf-1.2.0.tar.gz
# 进入到源码的 protoc-gen-go 目录
cd protobuf-1.2.0/protoc-gen-go
# 重新编译
go build
# 将生成的protoc-gen-go放入$GOROOT/bin目录下,重新编译protobuf文件
protoc xxx.proto --go_out=.
# 重新编译项目,问题解决
# C:\Users\answer\go\src\github.com\golang\protobuf $GOPATH\src\github.com\golang\protobuf
# 解决方案2
# 1. 使用正确的依赖版本:您的项目依赖项中应该有github.com/golang/protobuf 目录,
# 2. 将其替换为最新版本(v1.2.0),下载地址:https://github.com/golang/protobuf/releases,
# 3. 即将下载的目录替换项目中的github.com/golang/protobuf目录,问题解决。
# 删除生成的 ***.ptoto.pb.go 文件中的 XXX*** 字段和方法
Protobuf Support
插件
<plugin>
<groupId>org.xolstice.maven.pluginsgroupId>
<artifactId>protobuf-maven-pluginartifactId>
<version>0.5.0version>
<configuration>
<protoSourceRoot>${basedir}/src/main/protoprotoSourceRoot>
<protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}protocArtifact>
<pluginId>grpc-javapluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}pluginArtifact>
<outputDirectory>${project.basedir}/src/main/javaoutputDirectory>
<clearOutputDirectory>falseclearOutputDirectory>
configuration>
<executions>
<execution>
<goals>
<goal>compilegoal>
<goal>compile-customgoal>
goals>
execution>
executions>
plugin>
不指定路径的话,默认生成java文件路径: target\generated-sources\protobuf\java
方式2如果执行失败: 先执行
mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=3.0.0 -Dclassifier=windows-x86_64} -Dpackaging=exe -Dfile=C:\soft\protoc\bin\protoc.exe
再执行方式2。