Pre-built devcontainer for Go projects — microservices, CLIs, Kubernetes operators, and gRPC services. Works for both human developers and AI coding agents.
| Tool | Version | Purpose |
|---|---|---|
| Go | latest | Runtime, compiler, toolchain |
| Docker-outside-of-Docker | latest | Build images and run containers via the host Docker socket |
| kubectl | 1.36 | Deploy to and inspect Kubernetes clusters |
| Helm | 4.1.4 | Install and manage Helm charts |
| k3d | 5.8.3 | Local Kubernetes cluster (auto-started on container start) |
| git | latest | Source control |
GitHub CLI (gh) |
latest | PRs, issues, releases, Actions |
| Extension | Purpose |
|---|---|
github.copilot |
AI completions |
github.copilot-chat |
AI chat and inline edits |
anthropics.claude-code |
Claude Code agent |
golang.go |
Full Go toolchain: IntelliSense, debugging, test runner, gopls |
Run with live reload using air:
go install github.com/air-verse/air@latest
air{
"name": "my-grpc-service",
"image": "ghcr.io/dever-labs/devcontainers/go-dev:latest",
"forwardPorts": [50051],
"postCreateCommand": "go mod download && go install google.golang.org/protobuf/cmd/protoc-gen-go@latest && go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest"
}A k3d cluster starts automatically. Build and import your operator image directly:
docker build -t my-operator:local .
k3d image import my-operator:local -c devcontainer
kubectl apply -f config/go build -o bin/mycli ./cmd/mycli
./bin/mycli --helpgo test ./...
# with race detector and coverage
go test -race -coverprofile=coverage.out ./...
go tool cover -html=coverage.outGITHUB_TOKENis forwarded soghand git work without prompts.golang.goextension gives agents precise symbol resolution and type info via gopls.- Claude Code and Copilot extensions are pre-installed.
- Agents can run
go test ./..., build binaries, and deploy to the local k3d cluster without leaving the container.
Edit images/go-dev/devcontainer.json:
"ghcr.io/devcontainers/features/go:1": {
"version": "1.26" // pin to major.minor, or keep "latest"
}Push to main — all service repos pick it up on next rebuild.