gRPC 客户端如何优雅捕获错误?基于 grpc-errors 的 9 语言实战对比
gRPC 客户端如何优雅捕获错误基于 grpc-errors 的 9 语言实战对比【免费下载链接】grpc-errorsA handy guide to gRPC errors项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errorsgrpc-errors是一个专为 gRPC 开发者打造的错误处理速查指南项目它用 Python、Go、C、C#、Node.js、Ruby、Rust、Scala、Swift 等 9 种语言演示了 gRPC 客户端如何捕获错误、读取错误信息message和状态码code。如果你正在学习 gRPC 错误处理或想快速查某种语言里错误到底长什么样这个项目就是最省时间的参考。 它解决什么问题在 gRPC 中服务端的每一次失败都会变成一个带状态码StatusCode和错误详情details的状态对象传给客户端。但不同语言的 SDK 暴露它的方式完全不同有的是异常有的是错误对象有的是回调参数。grpc-errors 用最简单的示例服务把差异拉平了——所有语言都对着同一个hello.proto定义来写hello.proto定义了两个方法SayHello正常返回Hey, (name)!SayHelloStrict当Name长度超过 10 个字符时服务端返回INVALID_ARGUMENT错误详情为Length of Name cannot be more than 10 characters以 Python 服务端为例python/server.py核心就是这两行context.set_details(Length of Name cannot be more than 10 characters) context.set_code(grpc.StatusCode.INVALID_ARGUMENT)客户端要做的就是在每个语言里接住这个错误取出它的文案和编号。 通用三步法任何语言都一样无论哪门语言优雅的 gRPC 错误处理都遵循同一套三步捕获错误通过异常Python/Ruby/C#、返回值Go、状态对象C或回调参数Node/Swift拿到它读取错误信息取出 details用于日志或提示用户读取状态码并分支按INVALID_ARGUMENT、NOT_FOUND、UNAVAILABLE等状态码执行不同恢复逻辑 9 语言错误处理速查对比语言错误形式取错误信息取状态码客户端示例路径Pythongrpc.RpcError异常e.details()e.code()python/client.pyGo第二返回值errorstatus.FromError(err).Message()errStatus.Code()go/client.goCgrpc::Status对象status.error_message()status.error_code()cpp/client.cppC#RpcException异常e.Status.Detaile.Status.StatusCodecsharp/Hello/HelloClient/Program.csNode.js回调err参数err.messageerr.codenode/client.jsRubyGRPC::BadStatus异常e.detailse.coderuby/client.rbRust返回值 / Result从 reply 中查看—rust/src/client.rsScalaStatusRuntimeExceptiongetStatus.getDescriptiongetStatus.getCodescala/src/main/scala/hello/client/HelloClient.scalaSwift回调NSErrorerror.localizedDescriptionerror.codeswift/HelloClient/HelloClient/ViewController.swift Pythontry/except 状态码分支Python 是最直观的语言之一python/client.pytry: response stub.SayHelloStrict(hello_pb2.HelloReq(NameLeonhard Euler)) except grpc.RpcError as e: print(e.details()) # 错误文案 status_code e.code() # grpc.StatusCode 枚举 if grpc.StatusCode.INVALID_ARGUMENT status_code: pass # 针对特定错误做处理 else: print(response.Result)e.code()返回的是grpc.StatusCode枚举.name可得到INVALID_ARGUMENT.value是(3, invalid argument)调试时非常有用。 Go一个 error 值走天下Go 风格是用第二返回值接住错误再用status.FromError解包出 Statusgo/client.goresp, err : c.SayHelloStrict(ctx, api.HelloReq{Name: Leonhard Euler}) if err ! nil { errStatus, _ : status.FromError(err) fmt.Println(errStatus.Message()) // 错误文案 fmt.Println(errStatus.Code()) // codes.InvalidArgument if codes.InvalidArgument errStatus.Code() { // 分支处理 } }注意官方建议不要拿int(code)去做逻辑判断状态码常量才是稳定契约。 C 与 C#状态对象 vs 异常Ccpp/client.cpp调用后返回grpc::Status用status.ok()判断成功与否失败则读error_message()与error_code()INVALID_ARGUMENT对应数字 3。C#csharp/Hello/HelloClient/Program.cs同步调用直接抛RpcException通过e.Status.Detail与e.Status.StatusCode访问错误。 回调系与异常系的其他语言Node.jserr出现在回调里err.code grpc.status.INVALID_ARGUMENT用于分支node/client.jsRubyrescue GRPC::BadStatus ee.code可拿到整数 3ruby/client.rbScala阻塞客户端抛StatusRuntimeException异步客户端在Future.onFailure里接住scala/src/main/scala/hello/client/HelloClient.scalaSwift / Objective-CiOS 生态里错误以NSError形式出现在完成回调中error.code与GRPC_STATUS_INVALID_ARGUMENT比较swift/HelloClient/HelloClient/ViewController.swift⚡ 6 个实战避坑技巧永远检查成功路径示例代码为简洁跳过了SayHello的错误检查生产代码不能省按状态码分支别按文案分支错误文案会改状态码是协议契约不要用整数状态码写业务逻辑int(code) 3只适合临时调试区分RpcError与超时/取消DeadlineExceeded、Cancelled通常需要重试或降级错误信息要记日志别直接吞掉details是服务端特意留给你排查的线索多语言项目统一错误语义对照上表的状态码列保证各端对INVALID_ARGUMENT等码的处理一致 如何跑起来看效果克隆仓库git clone https://gitcode.com/gh_mirrors/gr/grpc-errors安装 gRPC 与 protobuf 编译器各语言的生成说明见对应目录下的 README如 go/README.md、python/README.md先启动任一语言的服务端如python/server.py监听 50051 端口运行对应语言的客户端观察打印出的错误文案与INVALID_ARGUMENT✅ 总结gRPC 错误处理的核心就两样东西状态码和错误详情。不同 SDK 的包装方式虽然各异——异常、Status 对象、回调参数——但思路完全一致。grpc-errors 用 9 种语言的最小示例把这套错误捕获姿势讲得明明白白适合作为团队多语言项目的错误处理对照手册也适合新手快速建立 gRPC 错误处理的整体认知。【免费下载链接】grpc-errorsA handy guide to gRPC errors项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

三步让 DirectDraw 老游戏复活:DDrawCompat 完整安装与调优指南

三步让 DirectDraw 老游戏复活:DDrawCompat 完整安装与调优指南

三步让 DirectDraw 老游戏复活:DDrawCompat 完整安装与调优指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/…

2026/8/23 18:04:37 阅读更多 →
10分钟上手HumanInput:新手从零搭建第一个快捷键的完整教程

10分钟上手HumanInput:新手从零搭建第一个快捷键的完整教程

10分钟上手HumanInput:新手从零搭建第一个快捷键的完整教程 【免费下载链接】HumanInput A JavaScript library for handling keyboard shortcuts and other human-generated events 项目地址: https://gitcode.com/gh_mirrors/hu/HumanInput HumanInput 是一…

2026/8/23 18:05:08 阅读更多 →
Photon Minecraft 光影包:会变的天空与彩色灯光,低配也能跑

Photon Minecraft 光影包:会变的天空与彩色灯光,低配也能跑

Photon Minecraft 光影包:会变的天空与彩色灯光,低配也能跑 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon Photon 是一款游戏向的 Minecraft 光影包。装进游戏…

2026/8/23 14:59:27 阅读更多 →

最新新闻

10个ChatGPT浏览器插件自动化技巧,提升工作效率

10个ChatGPT浏览器插件自动化技巧,提升工作效率

如果你正在使用 ChatGPT,但还停留在手动输入、复制粘贴的初级阶段,那这篇文章就是为你准备的。今天我们不谈概念,直接聚焦于如何通过浏览器插件,将 ChatGPT 的能力无缝嵌入你的日常工作流,实现真正的自动化。无论是内容…

2026/8/24 2:36:53 阅读更多 →
ExplorerPatcher:3 步把 Windows 11 的任务栏、开始菜单切回 Windows 10 风格

ExplorerPatcher:3 步把 Windows 11 的任务栏、开始菜单切回 Windows 10 风格

ExplorerPatcher:3 步把 Windows 11 的任务栏、开始菜单切回 Windows 10 风格 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher Expl…

2026/8/24 2:36:53 阅读更多 →
TOTK-mods 3步上手:王国之泪PC端高帧数优化完整指南

TOTK-mods 3步上手:王国之泪PC端高帧数优化完整指南

TOTK-mods 3步上手:王国之泪PC端高帧数优化完整指南 【免费下载链接】TOTK-mods 项目地址: https://gitcode.com/gh_mirrors/to/TOTK-mods 打开地图掉帧、掉帧时角色移动速度还变快?这是《塞尔达传说:王国之泪》的老毛病——它的帧率…

2026/8/24 2:36:53 阅读更多 →
手把手搭建本地AI报价工作台:基于LLM与业务数据的自动化方案

手把手搭建本地AI报价工作台:基于LLM与业务数据的自动化方案

这次我们来看一个能彻底改变传统报价流程的本地化AI工具——手把手搭建AI报价工作台。如果你厌倦了在多个Excel表格、PDF文档和内部系统之间来回切换,手动查找物料编码、核对价格、计算税费和利润,那么这个项目正是为你准备的。它不是一个云端SaaS服务&a…

2026/8/24 2:36:53 阅读更多 →
基于LLM智能体的电影角色性别表征量化分析:从剧本解析到数据洞察

基于LLM智能体的电影角色性别表征量化分析:从剧本解析到数据洞察

1. 项目缘起:当大模型成为“阅片无数”的影评人最近在折腾一个挺有意思的项目,起因是看到一篇关于电影角色性别刻板印象的讨论。大家常聊“电影里女性角色是不是总在等待被拯救”、“男性角色是不是总在主导叙事”,但这些讨论往往基于印象&am…

2026/8/24 2:36:53 阅读更多 →
pose-search 人体姿态搜索指南:MediaPipe 姿态检测与以姿搜姿的完整之旅

pose-search 人体姿态搜索指南:MediaPipe 姿态检测与以姿搜姿的完整之旅

pose-search 人体姿态搜索指南:MediaPipe 姿态检测与以姿搜姿的完整之旅 【免费下载链接】redux-devtools-extension Redux DevTools extension. 项目地址: https://gitcode.com/gh_mirrors/re/redux-devtools-extension pose-search 是一个基于 Web 的人体姿…

2026/8/24 2:35:53 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →