一、简介
protocol buffers 是 Google 开源的一套成熟的结构数据序列化机制
二、安装
Go语言源码地址:https://github.com/golang/protobuf
1. 安装编译器protoc
下载地址:https://github.com/google/protobuf/releases
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 --version或 protoc --help(使用说明)
2. 安装编译器插件protoc-gen-go (protoc-gen-go用于生成Go语言代码)
进入GOPATH目录,并运行
>go get -u github.com/golang/protobuf/protoc-gen-go
>cdgithub.com/golang/protobuf/protoc-gen-go
>gobuild
>goinstall
$GOPATH/bin中会生成protoc-gen-go.exe
三、编写.proto文件
protobuf3的语法可参考:
https://blog.csdn.net/u011518120/article/details/54604615#DefiningAMessageType
//指定proto3版本,默认是proto2
syntax = "proto3";
//指定包名
packagetestone;
//定义服务接口
service TestProto {
rpc SayHello (TestRequest) returns (TestResponse) {}
}
//定义类型
message TestRequest {
string name = 1;
int32age= 2;
}
message TestResponse {
string message = 1;
}
四、生成Go语言代码
指令介绍
> protoc--go_out=output_directory[-I=IMPORT_PATH]input_directory/file.proto
参数:
output_directory:指定生成file.proto.go文件的目录 (.是当前目录)
-I参数:可选,如果多个proto文件之间有互相依赖,生成某个proto文件时,需要import其他几个proto文件,这时候就要用-I来指定搜索目录
input_directory/file.proto :指定.proto文件
生成go文件
> protoc --go_out=.helloword.proto
会生成一个helloword.pb.go文件
五、在Go语言中使用
import (
"fmt"
"grpc_study/testone/testone"
"github.com/gogo/protobuf/proto"
【Go安装使用protobuf】)
func main() {
req := &testone.TestRequest{
Name:"Tome",
Age:20,
}
//编码数据
byts,err := proto.Marshal(req)
if err != nil {
return
}
req1 := &testone.TestRequest{}
//解码
proto.Unmarshal(byts,req1)
fmt.Println(req1)
}
结果:name:"Tome" age:20
参考地址:https://www.cnblogs.com/jkko123/p/7161843.html
推荐阅读
- grpc- python调用c++的rpc服务
- cmake|cmake - 如何生成grpc的*.pb.cc和*.pb.h文件
- GRPC 负载均衡实现
- AspNetCore|gRPC-Web 踩坑记
- #|gRPC 在 Java 中的入门实例
- grpc练习
- gRPC Java Quickstart
- GRPC 初体验
- grpc|在python中使用grpc和protobuf
- 微服务|GO-Grpc微服务开发六 网关和http调用