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


本文来自:简书

感谢作者:突击手平头哥

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

相关阅读 >>

聊聊cortex的backoff

简介

基于Go语言构建的万亿级流量大数据平台架构|文末彩蛋

一个Golang vue使用websocket 的例子

手撸Golang 基本数据结构与算法 图的最短路径  狄克斯特拉算法

手撸Golang 基本数据结构与算法 网页排名/pagerank,随机游走

Golang 快餐 - 环境变量

手撸Golang Go与微服务 saga模式之8 集成测试

Go 中使用 json 时,如何区分空字段和未设置字段

静态网站 介绍

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...