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

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