Go语言proto使用入门 Go语言proto使用入门

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)
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章