gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获
gRPC 错误处理入门第一课用 grpc-errors 快速搞懂 9 大语言的报错与捕获【免费下载链接】grpc-errorsA handy guide to gRPC errors项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors学习 gRPC 错误处理时新手最大的困惑就是不同语言的报错与捕获写法千差万别。本文以开源项目grpc-errors为向导用一个 Hello 示例带你一次性搞懂 Python、Go、C# 等 9 大语言中服务端如何报错、客户端如何捕获帮你快速建立统一的 gRPC 错误处理心智模型。为什么需要一份 gRPC 错误处理速查表如果你用过 HTTP对404 Not Found、500 Internal Server Error一定不陌生。gRPC 也有类似的状态码体系——Status Code只不过它更精细HTTP 习惯gRPC 错误码含义400INVALID_ARGUMENT参数不合法401UNAUTHENTICATED未认证403PERMISSION_DENIED无权限404NOT_FOUND资源不存在429RESOURCE_EXHAUSTED资源耗尽/限流超时DEADLINE_EXCEEDED调用超时503UNAVAILABLE服务不可用gRPC 一共有 16 个标准错误码。服务端选对码、客户端读对码就是 gRPC 错误处理的全部核心。grpc-errors 正是为此而生的项目——它为同一份接口协议提供了 9 种主流语言的完整报错/捕获示例堪称人形速查表。3 分钟看懂项目结构整个项目围绕一个极简协议展开hello.proto 中定义了HelloService服务的两个方法SayHello永远成功返回 Hey, (name)!SayHelloStrict当Name长度超过 10 个字符时抛出INVALID_ARGUMENT错误service HelloService { rpc SayHello(HelloReq) returns (HelloResp) {}; rpc SayHelloStrict(HelloReq) returns (HelloResp) {}; }每个语言目录都是一份标准答案语言目录服务端客户端Pythonpython/server.pyclient.pyGogo/server.goclient.goNode.jsnode/server.jsclient.jsC#csharp/Hello/HelloServer/Program.cscsharp/Hello/HelloClient/Ccpp/server.cppclient.cppRustrust/server.rsrust/src/client.rsRubyruby/ruby/server.rbruby/client.rbScalascala/scala/src/main/scala/hello/server/scala/src/main/scala/hello/client/Swift / Objective-Cswift/、objective-c/示例客户端工程—学习建议先看 Python语法最接近伪代码再看 Go错误处理风格最典型其余语言对照速查即可。服务端报错三步法以 Python 为例所有语言的服务端报错本质都是同一套动作检查条件 → 选择错误码 → 附带错误信息。以 python/server.py 中最清晰的实现为例def SayHelloStrict(self, request, context): if len(request.Name) 10: context.set_details(Length of Name cannot be more than 10 characters) context.set_code(grpc.StatusCode.INVALID_ARGUMENT) return hello_pb2.HelloResp()其他语言的同一种写法Go直接返回 error ——status.Errorf(codes.InvalidArgument, Length ofName...)见 go/server.goC#抛出异常 ——throw new RpcException(new Status(StatusCode.InvalidArgument, msg))Node.js把错误码塞进回调 ——callback({code: grpc.status.INVALID_ARGUMENT, message: msg})C返回Status(StatusCode::INVALID_ARGUMENT, msg)Ruby / Scala / Rustraise/Status.INVALID_ARGUMENT.asException/grpcio错误返回套路一致✅ 记住错误信息message写给人看错误码code写给程序看。客户端永远靠 code 做分支判断而不是靠 message 文本。客户端捕获三步法读码 → 读信息 → 做分支捕获端同样只有三步。最直观的 Python 版python/client.pytry: response stub.SayHelloStrict(hello_pb2.HelloReq(NameLeonhard Euler)) except grpc.RpcError as e: print(e.details()) # 错误信息 status_code e.code() if status_code grpc.StatusCode.INVALID_ARGUMENT: pass # 针对特定错误码做处理各语言捕获方式速查语言捕获方式取错误码取错误信息Pythonexcept grpc.RpcErrore.code()e.details()Goif err ! nilstatus.Code(err)status.Convert(err).Message()Node.js回调第一个参数err.codeerr.detailsC#try/catch RpcExceptionex.StatusCodeex.DetailC检查grpc::Statusst.error_code()st.error_message()Rubyrescue GRPC::RpcErrore.status_codee.detailsScalatry/catch StatusRuntimeExceptionstatus.codestatus.descriptionRustResult的Err分支status.code()status.message()⚠️新手易错点不要捕获所有异常然后打印。正确姿势是针对错误码做精确分支——比如INVALID_ARGUMENT提示用户改参数UNAVAILABLE才值得自动重试UNAUTHENTICATED则应引导重新登录。常用 gRPC 错误码选型指南选错错误码是新人最常见的问题这里给一张决策小抄用户传参不合法 →INVALID_ARGUMENT参数格式对但语义冲突如要删除一个已删除的资源→FAILED_PRECONDITION调用方未登录/令牌过期 →UNAUTHENTICATED资源不存在 →NOT_FOUND客户端超时 →DEADLINE_EXCEEDED服务端依赖挂了、网络不通 →UNAVAILABLE客户端可安全重试服务端自己的 bug →UNKNOWN最后手段优先想清楚具体是哪类错误本地运行 Demo最快上手路径 整个项目跑起来只需要两样依赖gRPC和protobuf 编译器protoc。第 1 步克隆仓库git clone https://gitcode.com/gh_mirrors/gr/grpc-errors第 2 步选一个语言跑起来推荐 Pythoncd grpc-errors/python pip install -r requirements.txt python server.py python client.py第 3 步观察错误客户端会先打印成功调用SayHello的返回然后触发SayHelloStrict的报错你会看到完整的错误信息Length ofNamecannot be more than 10 characters和错误码INVALID_ARGUMENT——这就是服务端报错到客户端捕获的完整链路。其他语言的构建步骤都写在各自目录的 README 中例如 go/README.md 里的protoc生成命令和go build流程照着敲即可。新手常见问题 FAQQ1gRPC 错误码和 HTTP 状态码能一一对应吗不能。gRPC 状态码更细16 种gRPC-Web 或网关场景下才需要映射到 HTTP 状态码。Q2自定义业务错误码怎么传标准做法是通过元数据Metadata或错误 message 携带业务码Status Code 保持标准含义两者各司其职。Q3哪些错误可以自动重试一般UNAVAILABLE、DEADLINE_EXCEEDED这类网络类错误适合重试INVALID_ARGUMENT这类客户端错误重试多少次都一样不要重试。写在最后gRPC 错误处理并不神秘服务端选对 Status Code客户端按 Code 精确分支剩下的只是各语言的语法差异。建议把 grpc-errors 当作随身速查手册——以后每接触一种新语言翻翻对应目录10 分钟就能补上该语言的错误处理知识。【免费下载链接】grpc-errorsA handy guide to gRPC errors项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析

Git XL 支持哪些 Excel 格式?xls/xlsx/xlsm/xlsb 等 9 种类型全面解析 【免费下载链接】git-xl Git extension: Makes git-diff work for VBA in Excel workbooks (xls* file types) 项目地址: https://gitcode.com/gh_mirrors/gi/git-xl Git XL 是一个开源的…

2026/8/22 14:44:07 阅读更多 →
Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚

Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚

Normy乐观更新实战:用optimisticData与rollbackData实现UI即时响应和自动回滚 【免费下载链接】normy Automatic normalization and data updates for data fetching libraries (react-query, vue-query, trpc, swr, rtk-query and more) 项目地址: https://gitco…

2026/8/22 14:44:07 阅读更多 →
ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤

ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤

ComfyUI 节点工作流怎么用:从0到跑通第一个图生视频的5个步骤 【免费下载链接】ComfyUI The most powerful and modular diffusion model GUI, api and backend with a graph/nodes interface. 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI 很…

2026/8/22 14:44:07 阅读更多 →

最新新闻

从零到跑通仅需5分钟:mdc-maui快速入门教程,搭建你的第一个Material Design界面

从零到跑通仅需5分钟:mdc-maui快速入门教程,搭建你的第一个Material Design界面

从零到跑通仅需5分钟:mdc-maui快速入门教程,搭建你的第一个Material Design界面 【免费下载链接】mdc-maui Material design components for .NET MAUI 项目地址: https://gitcode.com/gh_mirrors/md/mdc-maui mdc-maui(Material.Comp…

2026/8/22 15:25:20 阅读更多 →
Synology API Python 封装库实战指南:从 0 到 1 对接群晖 NAS

Synology API Python 封装库实战指南:从 0 到 1 对接群晖 NAS

Synology API Python 封装库实战指南:从 0 到 1 对接群晖 NAS 【免费下载链接】synology-api A Python wrapper around Synology API 项目地址: https://gitcode.com/gh_mirrors/sy/synology-api 想在代码里操作群晖 NAS——列文件、传文件、看磁盘状态、管下…

2026/8/22 15:25:20 阅读更多 →
使用 Tbox 打造生活小妙招智能应用:一次有趣的产品开发之旅

使用 Tbox 打造生活小妙招智能应用:一次有趣的产品开发之旅

目录 前言项目背景 解决真实生活痛点核心需求定义 开发过程回顾 第一轮开发:MVP 快速验证 1. 产品设计阶段2. 视觉设计阶段3. 开发部署阶段 第二轮迭代:功能完善升级 核心痛点分析优化方向确定第二轮开发成果 核心体验亮点 1. 对话即服务2. 场景化智能…

2026/8/22 15:25:20 阅读更多 →
MAA:明日方舟日常自动化助手,三步跑通全日常

MAA:明日方舟日常自动化助手,三步跑通全日常

MAA:明日方舟日常自动化助手,三步跑通全日常 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://g…

2026/8/22 15:25:20 阅读更多 →
Bitfocus Companion 拆解:把 Stream Deck 变成可编程的导播台

Bitfocus Companion 拆解:把 Stream Deck 变成可编程的导播台

Bitfocus Companion 拆解:把 Stream Deck 变成可编程的导播台 【免费下载链接】companion Bitfocus Companion enables the Elgato Stream Deck and other controllers to be a professional shotbox surface for an increasing amount of different presentation s…

2026/8/22 15:25:20 阅读更多 →
会讲故事才是硬实力:产品经理如何用Awesome-CheatSheets-and-MindMaps讲好PRD与团队协作沟通

会讲故事才是硬实力:产品经理如何用Awesome-CheatSheets-and-MindMaps讲好PRD与团队协作沟通

会讲故事才是硬实力:产品经理如何用Awesome-CheatSheets-and-MindMaps讲好PRD与团队协作沟通 【免费下载链接】Awesome-CheatSheets-and-MindMaps :books: Ultimate CheatSheets(Tutorials&MindMap), overview of syntax, features and practical tips, collect…

2026/8/22 15:24:20 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/22 7:31:03 阅读更多 →
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 阅读更多 →