windows 下 goprotobuf 的安装与使用

安装 protoc

 

安装protobuf的编译器protoc-参考

window:

  • 下载: protoc-3.3.0-win32.zip
  • 解压,把bin目录下的protoc.exe复制到GOPATH/bin下,GOPATH/bin加入环境变量。
  • 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exe
    linux:
  • 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip
  • 解压,把bin目录下的protoc复制到GOPATH/bin下,GOPATH/bin加入环境变量。
  • 如果喜欢编译安装的,也可下载源码自行安装,最后将可执行文件加入环境变量。

 

安装 protoc-gen-go

  • 在终端直接执行 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*** 字段和方法

 

使用maven生成

  • 步骤1: Idea 下载 Protobuf Support 插件
  • 步骤2: 配置pom文件
<!-- 编译protobuf -->
<plugin>
     <groupId>org.xolstice.maven.plugins</groupId>
     <artifactId>protobuf-maven-plugin</artifactId>
     <version>0.5.0</version>
     <configuration>
         <!-- 默认的proto文件路径 -->
         <protoSourceRoot>${basedir}/src/main/proto</protoSourceRoot>
         <protocArtifact>com.google.protobuf:protoc:3.0.0:exe:${os.detected.classifier}</protocArtifact>
         <pluginId>grpc-java</pluginId>
         <pluginArtifact>io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}</pluginArtifact>
         <!-- 指定生成的java文件路径 -->
         <outputDirectory>${project.basedir}/src/main/java</outputDirectory>
         <!-- <outputDirectory>${basedir}/out</outputDirectory> -->
         <!--
         	proto文件中配置路径: option java_package = "com.jaemon.protos.common";
         	项目中包路径格式: com.jaemon.dingtalk.***
         -->
         <clearOutputDirectory>false</clearOutputDirectory>
     </configuration>
     <executions>
         <execution>
             <goals>
                 <goal>compile</goal>
                 <!-- 按照指定的插件进行编译,即按照GRPC协议编译protob文件 -->
                 <goal>compile-custom</goal>
             </goals>
         </execution>
     </executions>
 </plugin>

不指定路径的话,默认生成java文件路径: target\generated-sources\protobuf\java

  • 步骤3:
    • 方式1: Idea右边栏Maven->Plugins->protobuf->protobuf:compile 双击执行
    • 方式2: 进入pom.xml文件目录下执行: mvn clean protobuf:compile

方式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。

 

Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jaemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值