protobuf是一种编解码协议,支持多种语言,比如go,python,c++,java,javascript等,效率比json更高,但是没有json那么易于理解。
安装编译工具:
截至到发文时间已更新至v3.18.0,下载位置:github链接
然后将压缩包解压,再将bin目录设置到$PATH环境变量下即可
插件此时还不支持golang,去grp-gateway按照提示安装:
syntax = "proto3";
package coolcar;
option go_package="coolcar/proto/gen/go;trippb";
message Trip {
string start = 1;
string end = 2;
int64 duration_sec = 3;
int64 fee_cent = 4;
}
生成xx.pb.go文件
(命令经常变动,以github为准)
将当前目录下的proto文件编译到./gen/go中,生成序列化相关文件
protoc -I . --go_out ./gen/go --go_opt paths=source_relative trip.proto
如果需要生成序列化和rpc文件,执行命令
protoc -I .
--go_out ./gen/go/ --go_opt paths=source_relative
--go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative
trip.proto
编解码的具体使用
package main
import (
trippb "coolcar/proto/gen/go"
"fmt"
"google.golang.org/protobuf/proto"
)
func main() {
trip := trippb.Trip{
Start: "abc",
End: "def",
DurationSec: 3600,
FeeCent: 10000,
}
b,err := proto.Marshal(&trip)
if err != nil {
return
}
fmt.Println(b)
var bb trippb.Trip
proto.Unmarshal(b,&bb)
fmt.Println(&bb)
}
我们知道grpc接口是无法被restful风格的前端调用的,使用grpc的命令可以帮助我们完成接口的转换:
转换前需要定义yaml文件:示例
type: google.api.Service
config_version: 3
http:
rules:
- selector: coolcar.TripService.GetTrip
get: /trip/{id}
输入以下命令会得到trip.pb.pw.go文件
protoc -I . --grpc-gateway_out ./gen/go
--grpc-gateway_opt paths=source_relative
--grpc-gateway_opt grpc_api_configuration=trip.yaml
trip.proto
未完待续,grpc最大的问题就是频繁更新,并且没有什么中文文档



