很多刚接触 Kratos 的同学一上来就跑 panic,第一反应往往是“代码写错了”。其实问题压根儿不在业务逻辑上,而是基础初始化那三件事没做对:没加载配置、没创建 server 实例、没把实例传给 kratos.New()

如何在Golang微服务中配置Kratos作为底层核心开发框架

kratos.New() 一运行就 panic,不是代码写错了,是基础初始化三件事全漏了:没加载配置、没创建 server 实例、没传进 kratos.New()。

conf.Load() 必须在 main() 第一行调用

kratos.New() 内部会主动触发配置加载,但默认没注册任何 config.Provider。你不挂 Provider 它会直接 panic:no config provider registered —— 没有任何上下文提示,全靠经验猜。

service.Register() 报 rpc error: code = Una vailable 是因为 grpc.Server 没启或没注入

service.Register() 并不是向远程服务注册,而是向你进程内已运行的 grpc.Server 实例注册。它失败,说明你根本没创建 grpc.Server,或者创建了但没传给 kratos.New()

proto 编译后没有 RegisterXXXServiceServer 方法

Kratos 的 gRPC 服务注册函数(如 RegisterDeviceServiceServer)不是 protoc-gen-go 生成的,必须用 protoc-gen-go-grpc(v2 版本)和 protoc-gen-go-http 两个插件一起生成。

最容易被忽略的是:kratos 启动流程里没有“可选步骤”——conf.Load()、server 实例创建、server 传入 kratos.New() 这三件事,缺一不可,且顺序固定。任何一步跳过或延后,都会导致 panic 发生在最开始,而不是你写的业务逻辑里。

本文转载于:https://www.php.cn/faq/2755424.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。