go doudou开发gRPC服务快速上手实现详解

go doudou开发gRPC服务快速上手实现详解

简介

本篇攻略旨在介绍如何使用go doudou快速上手实现gRPC服务,并提供2个示例说明。关于go doudou,它是一个快速开发Go语言web应用和RPC服务的轻量级框架。

步骤

步骤1:安装go doudou

安装go doudou,可以参考官方文档进行安装,安装完毕后,确保go doudou已经在使用。

步骤2:生成gRPC接口和客户端代码

使用Protobuf编写服务和消息规范,然后使用protoc-gen-go生成gRPC接口和客户端代码。示例如下:

# 生成gRPC Stub文件夹
$ protoc *.proto --go_out=plugins=grpc:.

示例1:简单的gRPC服务

假设我们要编写一个简单的gRPC服务,它具有以下接口:

service HelloGrpc {
  rpc SayHello(HelloRequest) returns (HelloResponse) {}
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

首先,在gRPC服务端实现HelloGrpc接口:

package main

import (
    "context"
    "fmt"
    "net"

    pb "example/hello_grpc"

    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
    return &pb.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        fmt.Printf("failed to listen: %v\n", err)
    }

    s := grpc.NewServer()
    pb.RegisterHelloGrpcServer(s, &server{})
    reflection.Register(s)

    fmt.Println("grpc start...")

    if err := s.Serve(lis); err != nil {
        fmt.Printf("failed to serve: %v\n", err)
    }
}

接着,在gRPC客户端实现HelloGrpc客户端:

package main

import (
    "context"
    "fmt"
    "log"

    pb "example/hello_grpc"

    "google.golang.org/grpc"
)

const (
    address = "localhost:50051"
)

func main() {
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()

    c := pb.NewHelloGrpcClient(conn)

    r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: "George"})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
}

启动gRPC服务端,然后运行gRPC客户端,将会输出如下结果:

Greeting: Hello George

示例2:gRPC服务使用中间件

假设我们要在gRPC服务中添加中间件,可以使用go doudou提供的gin-like中间件。示例代码如下:

package main

import (
    "context"
    "fmt"
    "net"

    pb "example/hello_grpc"
    "github.com/huangjunwen/go-doudou/svcmw/ginmw"
    "github.com/huangjunwen/go-doudou/svcmw/gjwt"
    "github.com/gin-gonic/gin"
    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
)

const (
    port = ":50051"
)

type server struct{}

func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
    return &pb.HelloResponse{Message: "Hello " + in.Name}, nil
}

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        fmt.Printf("failed to listen: %v\n", err)
    }

    s := grpc.NewServer(
        grpc.UnaryInterceptor(ginmw.ToGRPCUnaryServerMiddleware(
            gjwt.GJWTMiddleware(),
            gin.Recovery(),
        )),
    )

    pb.RegisterHelloGrpcServer(s, &server{})
    reflection.Register(s)

    fmt.Println("grpc start...")

    if err := s.Serve(lis); err != nil {
        fmt.Printf("failed to serve: %v\n", err)
    }
}

在这个示例中,我们使用了go doudou提供的gin-like中间件,并且使用了gjwt中间件。在使用中间件过程中,我们只需要调用ginmw.ToGRPCUnaryServerMiddleware函数将gin-like中间件转为gRPC服务器的中间件,并将输入的中间件列表作为其参数即可。

结论

本篇攻略介绍了如何使用go doudou进行gRPC服务的开发,提供了两个示例。结合Protobuf规范,可以开发出强大的、高效的gRPC服务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:go doudou开发gRPC服务快速上手实现详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Android开发VR实战之播放360度全景视频

    下面是详细的 Android 开发 VR 实战之播放 360 度全景视频的攻略: 准备工作 在开始本项目之前,我们需要安装如下软件/工具: Android Studio IDE:用于开发 Android 应用程序,构建虚拟现实场景 Unity3D:用于创建虚拟现实场景,导入视频素材并处理360度全景视频 创建Android Studio项目 在Android…

    GitHub 2023年5月16日
    00
  • Spring Boot jar 启动时设置环境参数的操作

    下面是关于 “Spring Boot jar 启动时设置环境参数的操作” 的详细攻略。 目录 背景 流程概述 示例一:使用Java命令参数设置 示例二:使用Spring Boot的设置方式 背景 在运行Spring Boot应用程序时,有时需要为应用程序设置环境变量,例如设置应用程序的端口或用于连接数据库的URL。设置这些参数可以通过Java命令参数或Spr…

    GitHub 2023年5月16日
    00
  • 详解git的基本使用方法

    详解Git的基本使用方法 什么是Git? Git是一个分布式版本控制系统,常用于代码管理和版本控制。相比其他版本控制系统,Git具有分支管理、本地版本控制和远程服务器交互等方面的优势。Git采用对等的分布式系统,可以让每个开发人员在自己的本地机器上克隆仓库,先在自己的本地环境里正确运行、测试和修改代码,然后再统一提交到公共仓库中,方便其他开发人员查看和合并代…

    GitHub 2023年5月16日
    00
  • 解决SpringCloud Config结合github无法读取配置的问题

    解决Spring Cloud Config结合GitHub无法读取配置的问题,可以按照以下完整攻略进行: 1. 配置GitHub Personal Access Token 首先需要在GitHub上配置Personal Access Token,用来在Spring Cloud Config中访问GitHub的私有仓库。具体步骤如下: 打开GitHub,进入S…

    GitHub 2023年5月16日
    00
  • go mod的使用方法小结

    下面我就来详细讲解一下“go mod的使用方法小结”的完整攻略,以及两条示例说明。 什么是go mod 在Go1.11版本中引入的go mod,是一个用于管理依赖项的工具。它可以将应用程序的依赖项转化为模块,并下载它们的代码。Go mod 还具有版本控制的功能,可以确保在编译代码时使用的依赖项版本是稳定的。使用 go mod 可以方便地解决 Go 语言依赖管…

    GitHub 2023年5月16日
    00
  • Go单元测试利器testify使用示例详解

    Go单元测试利器testify使用示例详解 在Go语言单元测试中,testify是一种经常使用的测试框架,它提供了一系列的断言、mock和suite的功能,使得我们可以编写更加优秀的测试代码。 本文将介绍testify框架的常用API,并提供两个使用示例。 安装testify 在开始使用testify之前,我们需要安装此框架。可以使用Go的包管理工具go g…

    GitHub 2023年5月16日
    00
  • golang构建工具Makefile使用详解

    对于golang构建工具Makefile的使用,以下是详细的攻略: 什么是Makefile Makefile是一个文本文件,其中包含一组用于构建和管理程序的规则。Makefile通过解析这些规则来生成目标文件。Makefile是Golang项目中常见的构建工具,可以简化代码编译、测试和部署的步骤,提高开发效率,这也是你需要学会如何使用Makefile的原因。…

    GitHub 2023年5月16日
    00
  • git多账号登录问题解析

    Git多账号登录问题解析 在使用Git的时候,我们可能拥有多个账号,比如公司账号和个人账号,但是每次需要切换账号时很麻烦,而且容易出错。那么如何解决这个问题呢?接下来我们就来详细讲解一下。 解决思路 Git的身份认证是通过SSH密钥来进行的,所以我们需要对每个账号生成不同的SSH密钥,并将其添加到对应的账号中。 解决步骤 生成新的SSH密钥 首先,我们需要为…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部