首页 > 其他分享 >gin上使用Grpc入门

gin上使用Grpc入门

时间:2023-10-05 20:56:36浏览次数:34  
标签:入门 err Grpc 代码 gRPC go gin example

要在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服务,并返回相应的消息。

标签:入门,err,Grpc,代码,gRPC,go,gin,example
From: https://www.cnblogs.com/cheyunhua/p/17743899.html

相关文章

  • 前端基础入门知识
    1.windows快捷键tab+alt切换窗口一直点tab会选择切换(主要)shift+小写状态下字母= 输出大写字母win+d快速切换到windows桌面 shift+crtl切换输入法  2.浏览器快捷键1.crtl+shift+c打开开发者模式(主要)f12也可以打开2.crtl+r强制刷新3.crtl......
  • Android入门教程 | UI布局之RelativeLayout 相对布局
    RelativeLayout简述RelativeLayout继承于android.widget.ViewGroup,按照子元素之间的位置关系完成布局,作为Android系统五大布局中最灵活也是最常用的一种布局方式,非常适合于一些比较复杂的界面设计。RelativeLayout和LinearLayout类似,都是ViewGroup,能“容纳”多个子view。R......
  • Dubbo3应用开发—协议(Dubbo协议、REST协议 、gRPC协议、Triple协议)
    协议协议简介什么是协议Client(Consumer端)与Server(Provider端)在传输数据时双方的约定。Dubbo3中常见的协议1.dubbo协议[前面文章中使用的都是dubbo协议]2.rest协议3.triple协议4.grpc协议5.thirft协议6.webservice协议7.rocketmq协议8.redis协议9.memacached协议.......
  • 0基础入门overleaf (latex)
    首先是官方文档,可以通过官方文档进行简单了解LearnLaTeXin30minutes-Overleaf,在线LaTeX编辑器Latex是一个编码式的排版工具,一切内容均通过  LaTeX命令 实现。在开头会对文章格式等内容进行设置,\documentclass{article}  %规定了文章类型\usepackage{...} ......
  • Bootstrap padding&margin样式
    Bootstrap中使用以下样式的类名,指定元素的padding和margin样式:{property}{sides}-{size}其中property的值为:-m:用于设置margin样式;-p:用于设置padding样式;其中sides值指定样式适用的边,可选值为:-t:设置margin-top或padding-top;......
  • vue-router.esm.js:2065 Uncaught (in promise) Error: Redirected when going from "
    原因:  vue-router路由版本更新产生的问题,导致路由跳转失败抛出该错误;真正的原因是由于返回了一个Promise对象,正常的跳转由then方法执行当正常的路由跳转,被"路由导航守卫"拦截并重新指定路由时,由于this.$router.push()返回的是Promise对象,此时then方法不能正常执......
  • FreeRTOS入门教程(同步与互斥)
    (文章目录)前言前几篇文章一直在围绕FreeRTOS中的任务创建,删除,优先级,调度算法进行讲解,那么从本篇文章开始将围绕同步与互斥来展开讲解。一、同步与互斥概念当多个任务或线程共享资源并发执行时,同步和互斥是两个关键的概念。1.同步(Synchronization)是指协调多个任务或线程的执......
  • 【C语言入门】第四天
    【例题1】2325.解密消息-力扣(LeetCode)intisTrue(charc,charchs[26],intpos){inti;for(i=0;i<pos;i++){if(c==chs[i]){return0;}}return1;}charlookForChar(charc,charchs[26]){for(inti=0;i<26;......
  • TypeScript入门到精通——TypeScript类型系统基础——单元类型、顶端类型、尾端类型
    单元类型 单元类型(UnitType)也叫作单例类型(SingletonType),指的是仅包含一个可能值的类型。由于这个特殊的性质,编译器在处理单元类型时甚至不需要关注单元类型表示的具体值。 TypeScript中的单元类型有以下几种:undefined类型null类型uniquesymbol类型void类型......
  • 简单入门 Rabbit MQ
    RabbitMQ1安装1.1mac当然是使用mac的神器homebrew咯。#切记先更新brewbrewinstallrabbitmq#如果出现找不到的情况,需要重置国内源exportHOMEBREW_BOTTLE_DOMAIN=''1.2docker拉取镜像dockerpullrabbitmq:management创建并运行容器dockerrun-di......