Go语言proto使用入门

突击手平头哥 · · 995 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:突击手平头哥

查看原文:Go语言proto使用入门

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

995 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传