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
.proto files 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 lint and 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.yaml and buf.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.ClientConn per request; always reuse connections.
Troubleshooting
- Error: Inconsistent Gen: If the generated code does not match the schema, run
buf generate and verify the go_package option.
- 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.CertPool on 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.Dial vs grpc.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
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
.proto files.
- @docker-expert - Containerizing gRPC services and configuring TLS cert injection via Docker secrets.
Source: sickn33/agentic-awesome-skills → skills/grpc-golang/SKILL.md
Also appears in: sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills/skills/grpc-golang/SKILL.md, sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills-claude/skills/grpc-golang/SKILL.md
1---2name: grpc-golang3description: 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.4---5
6
7# gRPC Golang (gRPC-Go)
8
9## Overview
10
11Comprehensive 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.
12
13## Use this skill when
14
15- Designing microservices communication with gRPC in Go.
16- Building high-performance internal APIs using Protobuf.
17- Implementing streaming workloads (unidirectional or bidirectional).
18- Standardizing API contracts using Protobuf and Buf.
19- Configuring mTLS for service-to-service authentication.
20
21## Do not use this skill when
22
23- Building pure REST/HTTP public APIs without gRPC requirements.
24- Modifying legacy `.proto` files without the ability to introduce a new API version (e.g., `api.v2`) or ensure backward compatibility.
25- Managing service mesh traffic routing (e.g., Istio/Linkerd), which is outside the application code scope.
26
27## Step-by-Step Guide
28
291. **Confirm Technical Context**: Identify Go version, gRPC-Go version, and whether the project uses Buf or raw protoc.
302. **Confirm Requirements**: Identify mTLS needs, load patterns (unary/streaming), SLOs, and message size limits.
313. **Plan Schema**: Define package versioning (e.g., `api.v1`), resource types, and error mapping.
324. **Security Design**: Implement mTLS for service-to-service authentication.
335. **Observability**: Configure interceptors for tracing, metrics, and structured logging.
346. **Verification**: Always run `buf lint` and breaking change checks before finalizing code generation.
35
36Refer to `resources/implementation-playbook.md` for detailed patterns, code examples, and anti-patterns.
37
38## Examples
39
40### Example 1: Defining a Service & Message (v1 API)
41
42```proto
43syntax = "proto3";
44package api.v1;
45option go_package = "github.com/org/repo/gen/api/v1;apiv1";
46
47service UserService {
48 rpc GetUser(GetUserRequest) returns (GetUserResponse);
49}
50
51message User {
52 string id = 1;
53 string name = 2;
54}
55
56message GetUserRequest {
57 string id = 1;
58}
59
60message GetUserResponse {
61 User user = 1;
62}
63```
64
65## Best Practices
66
67- ✅ **Do:** Use Buf to standardize your toolchain and linting with `buf.yaml` and `buf.gen.yaml`.
68- ✅ **Do:** Always use semantic versioning in package paths (e.g., `package api.v1`).
69- ✅ **Do:** Enforce mTLS for all internal service-to-service communication.
70- ✅ **Do:** Handle `ctx.Done()` in all streaming handlers to prevent resource leaks.
71- ✅ **Do:** Map domain errors to standard gRPC status codes (e.g., `codes.NotFound`).
72- ❌ **Don't:** Return raw internal error strings or stack traces to gRPC clients.
73- ❌ **Don't:** Create a new `grpc.ClientConn` per request; always reuse connections.
74
75## Troubleshooting
76
77- **Error: Inconsistent Gen**: If the generated code does not match the schema, run `buf generate` and verify the `go_package` option.
78- **Error: Context Deadline**: Check client timeouts and ensure the server is not blocking infinitely in streaming handlers.
79- **Error: mTLS Handshake**: Ensure the CA certificate is correctly added to the `x509.CertPool` on both client and server sides.
80
81## Limitations
82
83- Does not cover service mesh traffic routing (Istio/Linkerd configuration).
84- Does not cover gRPC-Web or browser-based gRPC integration.
85- Assumes Go 1.21+ and gRPC-Go v1.60+; older versions may have different APIs (e.g., `grpc.Dial` vs `grpc.NewClient`).
86- Does not cover L7 gRPC-aware load balancer configuration (e.g., Envoy, NGINX).
87- Does not address Protobuf schema registry or large-scale schema governance beyond Buf lint.
88
89## Resources
90
91- `resources/implementation-playbook.md` for detailed patterns, code examples, and anti-patterns.
92- [Google API Design Guide](https://cloud.google.com/apis/design)
93- [Buf Docs](https://buf.build/docs)
94- [gRPC-Go Docs](https://grpc.io/docs/languages/go/)
95- [OpenTelemetry Go Instrumentation](https://opentelemetry.io/docs/instrumentation/go/)
96
97## Related Skills
98
99- @golang-pro - General Go patterns and performance optimization outside the gRPC layer.
100- @go-concurrency-patterns - Advanced goroutine lifecycle management for streaming handlers.
101- @api-design-principles - Resource naming and versioning strategy before writing `.proto` files.
102- @docker-expert - Containerizing gRPC services and configuring TLS cert injection via Docker secrets.
103
104---
105
106**Source:** [`sickn33/agentic-awesome-skills`](https://github.com/sickn33/agentic-awesome-skills) → `skills/grpc-golang/SKILL.md`
107
108**Also appears in:** `sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills/skills/grpc-golang/SKILL.md`, `sickn33/agentic-awesome-skills/plugins/agentic-awesome-skills-claude/skills/grpc-golang/SKILL.md`