Go语言proto使用入门
环境安装
protoc安装
protoc是用于编译proto文件的工具
scoop安装
scoop bucket add extras //添加额外的仓库
scoop install protobuf //安装Protobuf
手动安装
可以从ProtoBuf仓库中下载相关文件安装
Golang支持安装
protoc可以将proto模板编译成多种语言,但是默认不支持go,需要额外安装插件
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
编译测试
//默认是Proto2
syntax = "proto3";
// 指定包名
//package pb;
option go_package = "../;main"; //两个参数一个是生成地址,一个是包名
// 定义消息体
message Response {
int32 error = 1; //1表示标识符,同一个message中不能重复
string ans = 2;
}
// 消息体嵌套
message Request {
string name = 1;
}
service ii14 {
rpc sayHello(Request) returns (Response);
}
protoc -I . --go_out=plugins=grpc:. ./*.proto
安装gRPC
go get -u google.golang.org/grpc
grpc测试
将上述protoc编译出来的go文件放到下述文件中同目录下引用使用
Server端
package main
import (
context "context"
"fmt"
"net"
"google.golang.org/grpc"
)
type RPCService struct {
}
func (srv *RPCService) SayHello(ctx context.Context, req *Request) (*Response, error) {
name := req.Name
return &Response{Error: 0, Ans: "Hello " + name}, nil
}
func main() {
grpcSrv := grpc.NewServer()
RegisterIi14Server(grpcSrv, new(RPCService))
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("net Listen error", err)
}
grpcSrv.Serve(listener)
}
Client端
package main
import (
context "context"
"fmt"
grpc "google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure())
if err != nil {
fmt.Println("grpc Dial error", err)
return
}
client := NewIi14Client(conn)
rep, err := client.SayHello(context.TODO(), &Request{Name: "zy"})
if err == nil {
fmt.Println("execute succ ", rep.Ans)
}
}
网友评论