跳至主要內容

安装protobuf和使用GRPC

gqzclGolang后端protobuf后端GPRC大约 1 分钟

安装protobuf和使用GRPC

首先我们知道protobuf是一种与语言无关、平台无关、可扩展的用来序列化和结构化数据的方法,用于通信协议,数据存储等。

下载

首先下载protocol编译器Protocol Bufferopen in new window

wget https://github.com/protocolbuffers/protobuf/releases/download/vx.x.x/protoc-x.x.x-linux-x86_64.zip
//解压到/usr/local路径下
sudo unzip protoc-xxx.zip -d /usr/local

或者自己新建文件夹,不过要将文件夹下的bin文件添加到环境变量

然后运行命令查看是否安装成功

protoc --version

然后下载Go 的protobuf插件protoc-gen-go

这个有两个版本,一个是github.com/golang/protobuf/protoc-gen-go ,一个是google.golang.org/protobuf/cmd/protoc-gen-go ,前者已经被后者所取代,进行了一些API的更新和简化,以及其他的一些改进,所有我们直接安装google提供的这个版本

go install [google.golang.org/protobuf/cmd/protoc-gen-go](http://google.golang.org/protobuf/cmd/protoc-gen-go)@latest

同时下载grpc

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

到了这里就可以开始了。

protoc --go_out=. message.proto
protoc --go-grpc_out=. message.proto

接下来看看proto文件的编写

首先写一个helloworld.proto

syntax = "proto3";

package helloworld;

option go_package = "google.golang.org/grpc/examples/helloworld/helloworld";
option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

logic.proto:5:1: Import "/home/gqzcl/gim/api/protocol/protocol.proto" was not found or had errors.

├── comet
│   ├── comet.pb.go
│   └── comet.proto
├── generate.go
├── helloworld
│   ├── helloworld.pb.go
│   ├── helloworld.proto
│   └── hs.proto
├── logic
│   ├── logic.pb.go
│   └── logic.proto
└── protocol
    ├── protocol.pb.go
    └── protocol.proto
//go:generate protoc -I./ -I$GOPATH/src --go_out=.  --go_opt=paths=source_relative logic/logic.proto
//go:generate protoc -I./ -I$GOPATH/src --go_out=.  --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative logic/logic.proto
$ go get -u google.golang.org/grpc