gin上使用Grpc入门

要在Go中使用基于Gin的gRPC,你需要执行以下步骤:

  1. 安装gRPC:使用以下命令安装gRPC:

go get -u google.golang.org/grpc
shell复制代码
  1. 安装protoc-gen-go:使用以下命令安装protoc-gen-go插件,它用于将protocol buffer文件生成Go代码:

go get -u github.com/golang/protobuf/protoc-gen-go
shell复制代码
  1. 创建一个protocol buffer文件:创建一个.proto文件,定义你的gRPC服务和消息类型。例如,创建一个名为example.proto的文件,并在其中定义你的服务和消息类型:

syntax = "proto3";

package example;

service HelloService {
    rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string message = 1;

}

 

protobuf复制代码

上述文件中的内容定义了一个名为example的包,并包含一个HelloService服务。在这个服务中,定义了一个名为SayHello的RPC方法,它接收一个HelloRequest消息作为输入,并返回一个HelloResponse消息作为输出。

HelloRequest消息包含一个name字段,类型为字符串,用于传递一个名称。

HelloResponse消息包含一个message字段,类型为字符串,用于传递一个消息。

  1. 生成Go代码:使用protoc命令生成Go代码。在命令行中运行以下命令:

protoc --go_out=plugins=grpc:. example.proto
shell复制代码

这将生成一个名为example.pb.go的Go文件,其中包含生成的gRPC代码。

  1. 创建一个基于Gin的gRPC服务器:创建一个Go文件,并使用以下代码创建一个基于Gin的gRPC服务器:

package main

import (
    "context"
    "example" //引入生成的Go代码
    "github.com/gin-gonic/gin"
    "google.golang.org/grpc"
    "net/http"
    "strconv"
)

func main() {
    r := gin.Default()
   
    // 创建一个gRPC连接
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    // 创建一个gRPC客户端
    client := example.NewHelloServiceClient(conn)

    // 定义一个Gin路由
    r.POST("/say-hello", func(c *gin.Context) {
        name := c.PostForm("name")

        // 调用gRPC服务
        req := &example.HelloRequest{Name: name}
        res, err := client.SayHello(context.Background(), req)
        if err != nil {
            c.JSON(http.StatusInternalServerError, gin.H{"error": err})
            return
        }
        c.JSON(http.StatusOK, gin.H{"message": res.Message})
    })

    // 启动Gin服务器
    if err := r.Run(":8080"); err != nil {
        panic(err)
    }
}
go复制代码

此代码创建了一个名为say-hello的POST路由,它通过调用gRPC服务将请求转发到HelloService.SayHello方法,并返回响应。

  1. 启动服务器:在命令行中执行以下命令启动服务器:

go run main.go
shell复制代码

现在,你可以发送一个POST请求到http://localhost:8080/say-hello,并在请求的主体中包含一个name参数,服务器将将其转发到gRPC服务,并返回相应的消息。

posted @   技术颜良  阅读(739)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
历史上的今天:
2022-10-05 通俗易懂!图解Go协程原理及实战
点击右上角即可分享
微信分享提示