本仓库包含一组按主题划分的独立小示例,每个目录可单独运行/测试。建议从上到下练习,每完成一个示例后根据注释做练习题。
- 运行示例:
go run ./basics/<目录名> - 运行测试/基准:
go test ./basics/<目录名> -bench . - 已通过
go test ./...验证。
01_hello:语法综览(变量/切片/map/方法)02_sum:表驱动测试与简单函数03_pointers:指针基础与方法接收者04_errors:错误处理(哨兵、自定义、包装、Is/As/Join)05_interface_assertion:接口、多态、类型断言、type switch06_embedding:结构体嵌入(组合替代继承)07_generics:泛型约束与通用函数08_concurrency:goroutine + channel + WaitGroup09_panic_defer:panic/recover、defer 资源释放10_mutex_atomic:Mutex vs atomic 计数器11_regex:正则匹配/捕获/替换12_fileio:文件读写、逐行读取、Stat13_http_stdlib:标准库 HTTP(路由/JSON/中间件/超时)14_sse:标准库 SSE 推送15_websocket:群聊/私聊/在线人数/踢下线示例16_json_time_context:JSON 编解码、time、HTTP context 超时17_testing_benchmark:子测试与基准测试
phase2/01_structured_http:拆分 main/router/handler/middleware/response,统一 JSON、请求 ID、日志、恢复phase2/02_validation:请求体验证、防大包、超时控制phase2/03_config:环境变量配置加载phase2/04_logging:slog 结构化日志中间件phase2/05_errors_handler:业务错误分类映射 HTTP 状态码phase2/06_auth_basic:基础鉴权(头部 X-Auth 放用户,context 透传)phase2/07_cors_rate:CORS 处理 + 每 IP 简易限流phase2/08_shutdown:健康检查与优雅退出
phase3/app:可运行骨架,特性:- Gin 路由 + 日志/恢复 + 请求 ID 中间件
- JWT 登录(/auth/login)与受保护路由(/api/todos)
- 内存 Todo 示例(可替换为 DB 仓储),RabbitMQ 发布接口(/api/events/publish)
- Prometheus
/metrics,健康检查/healthz(标记 DB/Redis/Rabbit 状态) - 配置通过环境变量:
APP_PORT、DB_DSN、REDIS_ADDR、REDIS_PASS、RABBIT_URL、JWT_SECRET
phase4/otel_app:Gin + OTEL OTLP(可接 Jaeger/Collector)phase4/rabbit_consumer:RabbitMQ 消费 demo-queuephase4/kafka_producer&phase4/kafka_consumer:Kafka 生产/消费示例phase4/k8s/:K8s 部署示例(app、otel-collector、jaeger).golangci.yml:基础 lint 配置;可运行golangci-lint run ./...docker-compose.yml+prometheus.yml:本地一键起 MySQL/Redis/Rabbit/Kafka/Jaeger/OTEL-Collector/Prometheus/Grafana
phase5/grpc_basics:最小 gRPC 服务/客户端(Echo)phase5/grpc_gateway:gRPC + gRPC-Gateway 暴露 HTTP/JSONphase5/grpc_middlewares:拦截器链(日志、占位鉴权、重试示例)phase5/grpc_otel:gRPC + OpenTelemetry 拦截器phase5/microservice_demo:HTTP 网关(Gin)调用下游 gRPC 订单服务- 详细运行步骤与命令:见
docs/phase5.md
- Lint:
golangci-lint run ./...(需安装 golangci-lint) - 漏洞扫描:
govulncheck ./...(需安装 govulncheck) - 测试:
go test ./...
- 本地依赖:
docker-compose up -d(MySQL/Redis/Rabbit/Kafka/Jaeger/Collector/Prometheus/Grafana) - Prometheus 抓取:
prometheus.yml默认抓取:8100(phase3 app)与 Collector:8888