Kratos是深度绑定Go生态的微服务框架,要求掌握Go基础语法、标准库(net/http、grpc)、context机制、Protobuf/gRPC契约、Wire依赖注入及配置/日志等原生能力,非零基础可上手。

必须学 Go 语言,Kratos 不是“零基础可上手”的胶水框架,它是用 Go 写的、为 Go 设计的、深度绑定 Go 生态的微服务工具箱。
Go 基础语法和运行时机制是硬门槛
你没法绕过 go 关键字写协程、chan 做通信、defer 管资源、interface{} 做抽象——Kratos 的 transport、middleware、server 启动逻辑全靠这些支撑。比如 http.Server 和 grpc.Server 都是 Go 标准库类型,Kratos 只做封装不替代;context.Context 在每个 handler 里透传元数据,没理解 cancel/timeout 机制就写不出健壮中间件。
- 至少能手写带
net/http路由、JSON 编解码、错误处理的 HTTP 服务 - 能看懂并修改
main()中的依赖注入(Wire)、server 初始化、配置加载流程 - 知道
init()、包导入顺序、_匿名导入的作用(比如注册 proto 插件)
Protobuf + gRPC 是默认通信契约,不是可选项
Kratos 的 API 定义、服务注册、客户端调用都建立在 .proto 文件基础上。它不接受手写 JSON-RPC 或自定义二进制协议——你得会写 service、rpc、option (google.api.http),还得明白生成的 XXXServiceServer 接口怎么实现、为什么需要 protoc-gen-go-grpc 而不是旧版 protoc-gen-go。
-
protoc --go-grpc_out=.必须成功生成RegisterXXXServiceServer函数,否则service.Register()直接 panic - HTTP 映射逻辑在
*_http.pb.go里,不是靠反射或约定,改了 proto 就得重生成 - 错误码用
enum定义,再通过工具生成 Go 错误判定函数,不是靠字符串匹配
配置、日志、依赖注入这些“基建”都靠 Go 原生能力拼装
Kratos 没有魔法配置中心或自动扫描 Bean,它的 conf.Load() 要你手动传 config.Provider,log.NewHelper() 依赖 log.Logger 实现,wire.Build() 是编译期代码生成——所有这些都在 Go 类型系统和构建流程里跑,不是 YAML 解析完就完事。
-
conf.NewFile("configs/app.yaml")路径错一个字符,kratos.New()就 panic:no config provider registered -
wire.NewSet()里漏传某个*sql.DB依赖,编译时报错位置在 generated wire_gen.go,不是你的 biz 代码 - 日志字段用
log.With()传map[string]interface{},不是 DSL 或注解
真正卡住人的从来不是 Kratos 文档,而是当你看到 transport.Context 提取不到 ctx.Value() 时,得立刻反应过来:HTTP 和 gRPC 的 transport.Context 封装方式不同,不能混用 key;或者 service.Register() 报 connection closed,第一反应应该是检查 grpc.NewServer() 是否创建、是否传进了 kratos.New(kratos.Server(...)) —— 这些判断全依赖对 Go 运行时和 Kratos 初始化链路的肌肉记忆。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











