Grpc golang
Skill srg-sphynx/MDForge/Sources/MDForge/Resources/SkillLibrary/Development/grpc-golang
Native macOS skill-catalog studio for Claude Code — browse 1,492 Markdown skills, customize with variables or AI (hosted or local), export to .claude/skills. SwiftUI + Liquid Glass.
npx -y skills add srg-sphynx/MDForge --skill grpc-golangAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Build production-ready gRPC services in Go with mTLS, streaming, and observability. Use when designing Protobuf contracts with Buf or implementing secure service-to-service transport.
SKILL.md
4.5 KB, ~1.0k tokens by cl100k_base, as published. Nobody here has run it
gRPC Golang (gRPC-Go)
Overview
Comprehensive guide for designing and implementing production-grade gRPC services in Go. Covers contract standardization with Buf, transport layer security via mTLS, and deep observability with OpenTelemetry interceptors.
Use this skill when
- Designing microservices communication with gRPC in Go.
- Building high-performance internal APIs using Protobuf.
- Implementing streaming workloads (unidirectional or bidirectional).
- Standardizing API contracts using Protobuf and Buf.
- Configuring mTLS for service-to-service authentication.
Do not use this skill when
- Building pure REST/HTTP public APIs without gRPC requirements.
- Modifying legacy
.protofiles without the ability to introduce a new API version (e.g.,api.v2) or ensure backward compatibility. - Managing service mesh traffic routing (e.g., Istio/Linkerd), which is outside the application code scope.
Step-by-Step Guide
- Confirm Technical Context: Identify Go version, gRPC-Go version, and whether the project uses Buf or raw protoc.
- Confirm Requirements: Identify mTLS needs, load patterns (unary/streaming), SLOs, and message size limits.
- Plan Schema: Define package versioning (e.g.,
api.v1), resource types, and error mapping. - Security Design: Implement mTLS for service-to-service authentication.
- Observability: Configure interceptors for tracing, metrics, and structured logging.
- Verification: Always run
buf lintand breaking change checks before finalizing code generation.
Refer to resources/implementation-playbook.md for detailed patterns, code examples, and anti-patterns.
Examples
Example 1: Defining a Service & Message (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;
}
Best Practices
- ✅ Do: Use Buf to standardize your toolchain and linting with
buf.yamlandbuf.gen.yaml. - ✅ Do: Always use semantic versioning in package paths (e.g.,
package api.v1). - ✅ Do: Enforce mTLS for all internal service-to-service communication.
- ✅ Do: Handle
ctx.Done()in all streaming handlers to prevent resource leaks. - ✅ Do: Map domain errors to standard gRPC status codes (e.g.,
codes.NotFound). - ❌ Don't: Return raw internal error strings or stack traces to gRPC clients.
- ❌ Don't: Create a new
grpc.ClientConnper request; always reuse connections.
Troubleshooting
- Error: Inconsistent Gen: If the generated code does not match the schema, run
buf generateand verify thego_packageoption. - Error: Context Deadline: Check client timeouts and ensure the server is not blocking infinitely in streaming handlers.
- Error: mTLS Handshake: Ensure the CA certificate is correctly added to the
x509.CertPoolon both client and server sides.
Limitations
- Does not cover service mesh traffic routing (Istio/Linkerd configuration).
- Does not cover gRPC-Web or browser-based gRPC integration.
- Assumes Go 1.21+ and gRPC-Go v1.60+; older versions may have different APIs (e.g.,
grpc.Dialvsgrpc.NewClient). - Does not cover L7 gRPC-aware load balancer configuration (e.g., Envoy, NGINX).
- Does not address Protobuf schema registry or large-scale schema governance beyond Buf lint.
Resources
resources/implementation-playbook.mdfor detailed patterns, code examples, and anti-patterns.- Google API Design Guide
- Buf Docs
- gRPC-Go Docs
- OpenTelemetry Go Instrumentation
Related Skills
- @golang-pro - General Go patterns and performance optimization outside the gRPC layer.
- @go-concurrency-patterns - Advanced goroutine lifecycle management for streaming handlers.
- @api-design-principles - Resource naming and versioning strategy before writing
.protofiles. - @docker-expert - Containerizing gRPC services and configuring TLS cert injection via Docker secrets.
Gives 0 of the 12 instructions most apis services skills give in ~1.0k tokens
Counted across 424 of the 426 authors here whose files we hold, read 2026-08-06
- use plural nouns for resource namesin 41 of 424, across 32 files
- use cursor-based pagination for large datasetsin 35 of 424, across 20 files
- include rate limit headers in responsesin 25 of 424, across 13 files
- Use kebab-case for multi-word resourcesin 23 of 424, across 13 files
- version APIs in the URL pathin 19 of 424, across 9 files
- use semantic HTTP status codesin 18 of 424, across 8 files
- verify webhook signaturesin 18 of 424, across 11 files
- use query parameters for filteringin 17 of 424, across 6 files
- use async database operationsin 14 of 424, across 7 files
- wrap successful responses in a data fieldin 13 of 424, across 3 files
- prefix sorting parameters with a hyphen for descending orderin 13 of 424, across 3 files
- set appropriate HTTP status codesin 13 of 424, across 6 files
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.