gRPC使用样例(golang)

本文介绍了如何使用gRPC和golang创建服务,包括环境准备、.proto文件定义、生成.pb.go文件,以及服务端和客户端的编写和测试。通过实例展示了服务端启动、客户端调用过程,最终实现'hello world!'的远程接口调用。
摘要由CSDN通过智能技术生成

第一部分:grpc使用样例介绍

使用grpc编写一个服务分如下三步:

  1. 编写一个“.proto”文件,在该“.proto”文件中定义相关服务
  2. 用protoc生成服务端和客户端共享的.pb.go文件
  3. 实现一个简单的grpc客户端和grpc服务器

一:环境准备

由“.proto”文件生成.pb.go文件,依赖protoc编译器、protoc编译器go插件及grpc-go第三方库文件

  1. 安装protoc
    ▪️ https://github.com/protocolbuffers/protobuf/releases,官网下载最新版protocol Buffers压缩包,并解压
    ▪️ 命令cd跳转至解压缩,依次执行“./configure”命令、“make”命令、“make check”命令、“sudo make install”命令
    ▪️ 通过“protoc --version”命令检测是否安装成功
  2. 安装go插件
    ▪️ go get -u github.com/golang/protobuf/protoc-gen-go
  3. grpc-go 第三方库下载
    ▪️ go get -u google.golang.org/grpc

二:样例文件及代码

自定义grpc文件夹,文件目录如下:

--grpc
	--proto
		--hello.proto
		--hello.pb.go
	--grpc_server.go
	--grpc_client.go

1:构建hello.proto文件并生成hello.pb.go文件
hello.proto文件

syntax = "proto3";

package proto;

message Request{
   
    string message=1;
}

message Reply{
   
    string message=1;
}

service Hello{
   
    rpc SayHello(Request)returns (Reply){
   }
}

grpc/proto文件目录下执行“protoc --go_out=plugins=grpc:. hello.proto “生成hello.pb.go文件。hello.pb.go文件中主要包含以下内容:

  • 服务端(helloServer)相关数据结构及服务函数
  • 客户端(helloClient)相关数据结构及服务函数
  • 客户端和服务端进行数据交互相关的消息初始化、传递、接收的数据结构及函数

注意:此步骤可能出现问题如下:

可能出现的问题:
	问题1: undefined: proto.ProtoPackageIsVersion3
	解决方案(更新protoc go插件至最新版本):
	go get -u github.com/golang/protobuf/protoc-gen-go
	问题2: undefined: grpc.SupportPackageIsVersion6
	解决方案(更新grpc包至最新版本):
	go get -u google.golang.org/grpc

▪️ hello.pb.go文件

// Code generated by protoc-gen-go. DO NOT EDIT.
// source: hello.proto
package proto
import (
	context "context"
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
	math "math"
)
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

const _ = proto.ProtoPackageIsVersion3 
/********客户端和服务端交互request相关*********/
type Request struct {
   
	Message              string   `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
	XXX_NoUnkeyedLiteral struct{
   } `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Request) Reset()         {
    *m = Request{
   } }
func (m *Request) String() string {
    return proto.CompactTextString(m) }
func (*Request) ProtoMessage()    {
   }
func (*Request) Descriptor() ([]byte, []int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值