新闻中心

Golang如何使用gRPC实现服务通信_Golang gRPC服务调用实践

2025-12-01
浏览次数:
返回列表
首先定义.proto接口文件并生成Go代码,然后实现服务端和客户端逻辑。服务端通过gRPC监听端口注册服务,客户端建立连接后调用远程方法,完成高效通信。

golang如何使用grpc实现服务通信_golang grpc服务调用实践

在Go语言中使用gRPC实现服务通信,是一种高效、跨语言的远程过程调用方式。它基于HTTP/2协议,采用Protocol Buffers作为接口定义语言(IDL),具有高性能和强类型的优势。下面通过一个实际例子,介绍如何使用Golang结合gRPC完成服务端与客户端的通信。

定义服务接口(.proto文件)

第一步是定义服务接口和消息结构。创建一个hello.proto文件:

syntax = "proto3";
<p>package greet;
option go_package = "./greetpb";</p><p>service Greeter {
rpc SayHello (HelloRequest) returns (HelloResponse);
}</p><p>message HelloRequest {
string name = 1;
}</p><p>message HelloResponse {
string message = 1;
}

这个文件定义了一个Greeter服务,包含一个SayHello方法,接收HelloRequest并返回HelloResponse

生成Go代码

安装protobuf编译器和Go插件:

# 安装 protoc 编译器(需系统级安装)
# 然后安装 Go 插件
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

执行命令生成Go代码:

protoc --go_out=. --go_opt=paths=source_relative \
       --go-grpc_out=. --go-grpc_opt=paths=source_relative \
       hello.proto

会生成两个文件:hello.pb.gohello_grpc.pb.go,分别包含消息结构和服务桩代码。

实现gRPC服务端

编写服务端逻辑,实现定义的服务接口:

Narration Box Narration Box

Narration Box是一种语音生成服务,用户可以创建画外音、旁白、有声读物、音频页面、播客等

Narration Box 68 查看详情 Narration Box
package main
<p>import (
"context"
"log"
"net"</p><pre class="brush:php;toolbar:false;">"google.golang.org/grpc"
pb "your-module/greetpb"

)

type server struct { pb.UnimplementedGreeterServer }

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

func main() { lis, err := net.Listen("tcp", ":50051") if err != nil { log.Fatalf("failed to listen: %v", err) }

s := grpc.NewServer()
pb.RegisterGreeterServer(s, &server{})

log.Println("gRPC server running on :50051")
if err := s.Serve(lis); err != nil {
    log.Fatalf("failed to serve: %v", err)
}

}

服务端监听:50051端口,注册GreeterServer实现,并启动gRPC服务器。

编写gRPC客户端

客户端连接服务端并调用远程方法:

package main
<p>import (
"context"
"log"
"time"</p><pre class="brush:php;toolbar:false;">"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
pb "your-module/greetpb"

)

func main() { conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials())) if err != nil { log.Fatalf("did not connect: %v", err) } defer conn.Close()

client := pb.NewGreeterClient(conn)

ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

resp, err := client.SayHello(ctx, &pb.HelloRequest{Name: "Alice"})
if err != nil {
    log.Fatalf("could not greet: %v", err)
}

log.Printf("Response: %s", resp.GetMessage())

}

客户端通过grpc.Dial建立连接,创建Stub对象后即可像调用本地方法一样发起远程调用。

基本上就这些。只要定义好proto接口,生成代码,再分别实现服务端逻辑和客户端调用,就能完成一次完整的gRPC通信。这种方式清晰、高效,适合微服务架构中的服务间交互。

以上就是Golang如何使用gRPC实现服务通信_Golang gRPC服务调用实践的详细内容,更多请关注其它相关文章!


# 进行分类  # 酒泉营销网络推广  # 德州品牌seo推广公司  # 高校博士网站建设流程  # 太仓网站建设与制作  # 上海营销推广品牌  # 模拟营销推广计划  # 北京小俊哥网站建设  # 漯河网站策划推广排名  # 佛山专业网站优化靠谱么  # 健身营销推广语录怎么写  # 中文网  # 相关文章  # 就能  # golang  # 使用技巧  # 第三方  # 是一种  # 如何使用  # 客户端  # 服务端  # red  # google  # ai  # 端口  # go语言  # go  # grpc 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: css链接悬停下划线样式如何自定义_使用::after结合content和transition  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  深入理解J*aScript中的B样条曲线与节点向量生成  如何更改在 Excel 中打开超链接时的默认浏览器  谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示  微信网页版官方入口直达 微信网页版网页版登录使用方法  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  Python多版本共存与虚拟环境管理深度指南  QQ邮箱网页版入口登录 QQ邮箱在线邮箱官方通道  Flexbox布局实践:实现粘性导航栏与底部固定页脚  C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器  Golang如何使用new_Go new分配内存机制讲解  文本文档写html代码怎么运行_文本文档html代码运行步骤【教程】  优化MinIO list_objects_v2 操作的性能瓶颈与最佳实践  Lar*el 递归关系中排除指定分支的教程  微信聊天记录怎么加密_微信聊天记录加密方法  字由网在线版登录地址 字由网网页版安全入口  绝地鸭卫平a核爆刀流玩法攻略  MAC如何安全彻底地删除文件_MAC使用终端命令确保文件无法被恢复  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正  Python大型XML文件高效流式解析教程  顺丰快递查单号物流信息 顺丰快递小程序查询入口  Golang如何安装Swagger工具_GoSwagger文档生成环境  小红书怎么解除第三方平台绑定_小红书多平台登录解绑方法介绍  漫画星球免费下拉式入口 漫画星球免费漫画在线阅读网站  Tabulator表格日期时间排序问题及自定义解决方案  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  提升Kafka消费者健壮性:会话超时处理与消息处理语义  在Runstone环境中高效处理TasteDive API的JSON数据  C++ string find函数返回值npos详解_C++字符串查找失败的判断条件  解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  如何使用Go和Martini动态服务解码后的图片  b站如何看历史记录_b站观看历史找回方法  Win11怎么开启省电模式_Win11电池节电模式自动开启  将HTML动态表格多行数据保存到Google Sheet的教程  J*aScript实现单选按钮与关联输入框的联动禁用教程  163邮箱注册官网 免费申请163个人邮箱  CSS Grid如何控制元素对齐_align-items与justify-items组合使用  Golang如何使用const iota_Go iota常量计数器讲解  冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法  拷贝漫画电脑版官网入口 拷贝漫画(PC版)在线直达  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  Go语言HTML解析:利用Goquery精准获取指定元素内容  jQuery Mask 插件中实现电话号码固定前导零的教程  4399网页游戏电脑版全新入口 4399电脑端在线玩指南  CSS布局中意外空白:解决padding-top导致的顶部间距问题 

搜索