找回密码
 立即注册
查看: 226|回复: 0

protobuf编译工具安装与使用

[复制链接]
发表于 2023-2-15 20:37 | 显示全部楼层 |阅读模式
1. 安装Go

1.1 下载Go

wget https://studygolang.com/dl/golang/go1.13.4.linux-amd64.tar.gz
# 解压
tar -zxvf go1.13.4.linux-amd64.tar.gz1.2 配置go环境

编辑 /etc/profile 文件
vim ~/.bashrc将下面内容加入到末尾(GOPAT是我Windows中的GOPATH)
export GOROOT=/usr/local/go
export GOPATH=/home/pibigstar/goWork
export PATH=$GOPATH/bin:$PATH
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin2. 工具安装

2.1 安装protoc

去这个网址下载:https://github.com/protocolbuffers/protobuf/releases,根据自己的系统,下载对应的文件 解压:
unzip protoc.zip将bin文件夹下的 protoc 复制到Linux 中的 /bin目录下
sudo cp protoc/bin/protoc /bin/protoc执行 protoc -verson 如果输出版本信息则证明配置成功
2.2 安装protoc-gen-go

# 下载
git clone https://github.com/golang/protobuf.git
# 进入目录
cd protobuf/protoc-gen-go
# 编译
go install2.3 安装protoc-gen-validate

这个是用来生成pb的校验规则文件,也就是*.pb.validate.go
go get -u github.com/envoyproxy/protoc-gen-validate2.4 安装protoc-gen-doc

这个是用来生成 proto 的文档文件,会生成一个 html 格式的文档, 下载地址:https://github.com/pseudomuto/protoc-gen-doc/releases
wget https://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 -zxvf protoc-gen-doc-1.3.0.windows-amd64.go1.11.2.tar.gz2.5 安装proto-gen-java

可在这个地址下载 protoc-gen-java工具,https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java/ ,记得把文件名改为protoc-gen-grpc-java
<hr/>3. 编译

3.1 hello.proto

syntax="proto3";

package main;

message Hello {
        string value = 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 则不会使用option go_package中指定的路径 使用 import 则是使用option go_package 中指定的路径
3.2.2 编译为Java代码 (protoc-gen-java)

可在这个地址下载 protoc-gen-java工具,https://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.proto3.2.3 生成proto文档(proto-gen-doc)

protoc --doc_out=. --doc_opt=html,index.html:Ignore* hello.proto user.proto3.3 复杂点的proto

syntax="proto3";

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

//生成go文件的路径
option go_package          = "pb/admin";
//关闭Java多文件
option java_multiple_files = false;
//生成的Java文件的package路径
option java_package        = "pb.admin";

service UserService {
        rpc Login(LoginReq) returns (LoginResp);
}

message LoginReq {
        string username = 1;
        string password = 2;
}

message LoginResp {
        int32 code = 1;
    string msg = 2;
}3.4 编译脚本

#!/usr/bin/env bash

TARGET="../"

if [ -n "$1" ]; then
    TARGET=$1
fi

# 排除掉 extra/src 目录
for file in `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欢迎关注我的微信公众号一起学习编程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 09:01 , Processed in 0.088163 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表