mcpField
G
grpc-golang

grpc-golang

github.com/sickn33开发48.7k81 次安装今天更新
代码仓库

关于 grpc-golang

面向 Go 开发者的技能,指导设计和实现生产级 gRPC 服务,涵盖 Protobuf 与 Buf 契约、mTLS 安全、流式处理和 OpenTelemetry 可观测性。

主要功能

  1. 01Go gRPC 服务设计
  2. 02Protobuf 契约版本管理
  3. 03Buf 检查与破坏性变更验证
  4. 04mTLS 服务身份验证
  5. 05OpenTelemetry 插桩

适用场景

  1. 01设计 Go 微服务通信
  2. 02构建基于 Protobuf 的内部 API
  3. 03实现一元或流式 RPC
  4. 04为 gRPC 服务添加追踪和指标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill grpc-golang

安装后在 Claude Code 中输入/grpc-golang确认已加载。

附带文件resources/implementation-playbook.md

详细介绍

gRPC Golang(gRPC-Go)

概述

全面介绍如何在 Go 中设计和实现生产级 gRPC 服务。涵盖使用 Buf 标准化契约、通过 mTLS 实现传输层安全,以及借助 OpenTelemetry 插桩实现深入的可观测性。

适用场景

  • 使用 Go 和 gRPC 设计微服务通信。
  • 使用 Protobuf 构建高性能内部 API。
  • 实现流式工作负载(单向或双向)。
  • 使用 Protobuf 和 Buf 标准化 API 契约。
  • 配置 mTLS 以进行服务间身份验证。

不适用场景

  • 构建不需要 gRPC 的纯 REST/HTTP 公共 API。
  • 修改旧版 .proto 文件,但无法引入新的 API 版本(例如 api.v2)或确保向后兼容。
  • 管理服务网格流量路由(例如 Istio/Linkerd),这超出了应用代码的范围。

分步指南

  1. 确认技术背景:确定 Go 版本、gRPC-Go 版本,以及项目使用的是 Buf 还是原生 protoc。
  2. 确认需求:确定 mTLS 需求、负载模式(单次调用/流式)、SLO 和消息大小限制。
  3. 规划 Schema:定义包版本(例如 api.v1)、资源类型和错误映射。
  4. 安全设计:实现 mTLS,以进行服务间身份验证。
  5. 可观测性:配置拦截器,以实现追踪、指标和结构化日志记录。
  6. 验证:在完成代码生成前,始终运行 buf lint 和破坏性变更检查。

详细模式、代码示例和反模式请参阅 resources/implementation-playbook.md。

示例

示例 1:定义服务和消息(v1 API)
syntax = "proto3";
package api.v1;
option go_package = "github.com/org/repo/gen/api/v1;apiv1";

service UserService {
  rpc GetUser(GetUserRequest) returns (GetUserResponse);
}

message User {
  string id = 1;
  string name = 2;
}

message GetUserRequest {
  string id = 1;
}

message GetUserResponse {
  User user = 1;
}

最佳实践

  • ✅ 应做: 使用 Buf,通过 buf.yaml 和 buf.gen.yaml 标准化工具链和 lint 检查。
  • ✅ 应做: 始终在包路径中使用语义化版本(例如 package api.v1)。
  • ✅ 应做: 对所有内部服务间通信强制使用 mTLS。
  • ✅ 应做: 在所有流式处理程序中处理 ctx.Done(),以防止资源泄漏。
  • ✅ 应做: 将领域错误映射为标准 gRPC 状态码(例如 codes.NotFound)。
  • ❌ 不应做: 向 gRPC 客户端返回原始内部错误字符串或堆栈跟踪。
  • ❌ 不应做: 每个请求都创建新的 grpc.ClientConn;应始终复用连接。

故障排查

  • 错误:生成结果不一致:如果生成的代码与 Schema 不匹配,请运行 buf generate 并检查 go_package 选项。
  • 错误:上下文超时:检查客户端超时设置,并确保服务器不会在流式处理程序中无限阻塞。
  • 错误:mTLS 握手失败:确保客户端和服务器两端都已将 CA 证书正确添加到 x509.CertPool。

限制

  • 不涵盖服务网格流量路由(Istio/Linkerd 配置)。
  • 不涵盖 gRPC-Web 或基于浏览器的 gRPC 集成。
  • 提供的是特定版本的示例,而非受支持版本矩阵;请确认当前 Go/gRPC-Go 模块要求和 API(例如 grpc.Dial 与 grpc.NewClient)。
  • 不涵盖 L7 gRPC 感知型负载均衡器配置(例如 Envoy、NGINX)。
  • 不涉及 Protobuf Schema 注册表或 Buf lint 之外的大规模 Schema 治理。

资源

相关技能

  • @golang-pro - gRPC 层之外的通用 Go 模式和性能优化。
  • @go-concurrency-patterns - 流式处理程序的高级 goroutine 生命周期管理。
  • @api-design-principles - 编写 .proto 文件前的资源命名和版本控制策略。
  • @docker-expert - 将 gRPC 服务容器化,并通过 Docker secrets 配置 TLS 证书注入。

评论

支持 Markdown